Mit UITapGestureRecognizer
Neuen iPhone dev. Ich habe eine view enthält eine UIScrollView enthält eine UIImageView. Ich habe eine (Doppel -) Tippen Sie auf " gestik-Erkennung auf dem Bild sehen, welche macht eine alert-box öffnen. Für einige Grund, und ich bin sicher, ich bin nur zurückgeblieben, es öffnet sich 3 mal.
Hier ist mein code:
- (void)viewDidLoad {
scrollView.delegate = self;
UIImage* image = imageView.image;
imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
scrollView.contentSize = image.size;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapGesture.numberOfTapsRequired = 2;
[imageView addGestureRecognizer:tapGesture];
[tapGesture release];
NSLog(@"LOADED");
[super viewDidLoad];
}
-(IBAction) handleTapGesture:(UIGestureRecognizer *) sender {
CGPoint tapPoint = [sender locationInView:imageView];
int tapX = (int) tapPoint.x;
int tapY = (int) tapPoint.y;
NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
[alert show];
[alert release];
}
Ich habe gerade angefangen, das iPhone dev vor ein paar Tagen. Dieses problem erinnert mich irgendwie von Ereignis-bubbling Themen, die ich behandelt haben, die in javascript. Irgendwelche Ideen?
Oh, und es scheint, wie es ist erwähnenswert, dass die NSLog nicht auftreten, alle drei mal.
InformationsquelleAutor tybro0103 | 2010-10-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, was der genaue Grund ist aber die uialertview-Objekt ist irgendwie verursacht die Geste, um das Feuer wieder. Eine Problemumgehung zum ausführen der Vorführung außerhalb der Geste handler mit performSelector:
Edit:
Die gestik-Erkennung durchläuft verschiedene Zustände der Bewegung (Begann, Geändert, etc) und es ruft der hf-Methode jedes mal, wenn der Zustand sich ändert. Also eine bessere und vermutlich korrekte Lösung ist, überprüfen Sie die Eigenschaft state des gesture recognizer an der Spitze der handler:
InformationsquelleAutor