2016-04-25 24 views
0

Ich muss alle Geste auf meinem imageview auf einmal durchführen, bedeutet Benutzer kann imageview auf einmal tippen auf einmal tippen auch Zoomen und Drehen möglich.Jetzt bin ich gefunden, diese Methoden, um mehrere Gesten durchzuführen, aber nicht ausführen können Zoom und Rotation. wenn möglichWie wird mit mehreren Touch-Gesten gleichzeitig verfahren?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 

Bevor ich UIPinchGestureRecognizer angewandt werde, UIRotationGestureRecognizer und UIPanGestureRecognizer aber es nur eine Geste an einer time.Please hilft mir damit umgehen zu lösen oder mir andere bessere Wahl geben.

+0

diese http://stackoverflow.com/questions/36787393/need-to-apply-uirotationgesturerecognizer-followed-by-uilongpressgesturerecongni –

+0

@EI Kapitän würde helfen können In meinem Fall - (BOOL) GestenRecognizer: (UIGestureRecognizer *) GestenRecognizer sollteRecognizeSimultanelyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer-Methode nicht auf mehrere Berührung aufgerufen werden können Sie mich vorschlagen, wenn diese Methode Aufruf erhält? –

+0

Sie müssen Gesten hinzufügen [view addGestureRecognizer: longPress]; –

Antwort

0
UIPinchGestureRecognizer *pinchGesture = ... //initialize 
pinchGesture.delegate = self; 
//same for rotation gesture 
//and then implement delegate method 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
+0

Ja, Sie haben Recht. Ich habe mein Problem gelöst, nur vergessen, Delegat zu setzen, keine Notwendigkeit, die oben genannten Methoden zu verwenden. –

0

Legen Sie die Geste so fest.

self.view.multipleTouchEnabled=YES; 
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveViewWithGestureRecognizer:)]; 
panGestureRecognizer.delegate=self; 
[self.sub_View addGestureRecognizer:panGestureRecognizer]; 

UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationWithGestureRecognizer:)]; 
rotationGestureRecognizer.delegate=self; 
[self.sub_View addGestureRecognizer:rotationGestureRecognizer]; 

UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchWithGestureRecognizer:)]; 
pinchGestureRecognizer.delegate=self; 
[self.sub_View addGestureRecognizer:pinchGestureRecognizer]; 

[self.imageView setUserInteractionEnabled:YES]; 

Behandeln Sie die Aktion

-(void)handlePinchWithGestureRecognizer:(UIPinchGestureRecognizer *)pinchGestureRecognizer{ 

[self.superImage_View setAlpha:0.5]; 
if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) { 
    [self.superImage_View setAlpha:1.0]; 
} 
self.imageView.transform = CGAffineTransformScale(self.imageView.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale); 
pinchGestureRecognizer.scale =1.0; 
} 

-(void)handleRotationWithGestureRecognizer:(UIRotationGestureRecognizer *)rotationGestureRecognizer{ 
[self.superImage_View setAlpha:0.5]; 
if (rotationGestureRecognizer.state == UIGestureRecognizerStateEnded) { 
    [self.superImage_View setAlpha:1.0]; 
} 
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, rotationGestureRecognizer.rotation); 
rotationGestureRecognizer.rotation = 0.0; 

} 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
return YES; 
    } 

-(void)moveViewWithGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer{ 
//CGPoint touchLocation = [panGestureRecognizer locationInView:self.sub_View]; 
// self.imageView.center = touchLocation; 
[self.superImage_View setAlpha:0.5]; 
CGPoint translation = [panGestureRecognizer translationInView:self.view]; 
self.imageView.center = CGPointMake(self.imageView.center.x + translation.x, 
            self.imageView.center.y + translation.y); 
[panGestureRecognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) { 

    CGPoint velocity = [panGestureRecognizer velocityInView:self.view]; 
    CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y)); 
    CGFloat slideMult = magnitude/200; 
    // NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult); 

    float slideFactor = 0.1 * slideMult; // Increase for more of a slide 
    CGPoint finalPoint = CGPointMake(self.imageView.center.x + (velocity.x * slideFactor), 
            self.imageView.center.y + (velocity.y * slideFactor)); 
    finalPoint.x = MIN(MAX(finalPoint.x, 0), self.view.bounds.size.width); 
    finalPoint.y = MIN(MAX(finalPoint.y, 0), self.view.bounds.size.height); 

    [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     self.imageView.center = finalPoint; 
    } completion:nil]; 
    [self.superImage_View setAlpha:1.0]; 
} 
}