ios objective-c uiviewanimation uipinchgesturerecognizer

ios - Error al recibir la notificación de estado de gestos del sistema antes del próximo toque



objective-c uiviewanimation (1)

Tengo un control que alternará dos vistas alternativamente en una vista. es decir, se agregan dos controladores de vista mediante el método de vista secundaria en una vista de contenedor. Un pinch out gusture zooms en la vista actual, y muestra la segunda vista. Si desea ir a la vista anterior, un gusano de pellizco lo hará. El problema es que la vista no reacciona ante la tormenta a veces no siempre y el mensaje "Failed to receive system gesture state notification before next touch" : se imprime en el registro. ¿Alguna sugerencia de por qué viene este mensaje y la vista no reconoce la explosión?

- (void)scaleHandler:(UIPinchGestureRecognizer *)gestureRecognizer{ CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue]; if([gestureRecognizer state] == UIGestureRecognizerStateBegan) { // Reset the last scale, necessary if there are multiple objects with different scales lastScale = [gestureRecognizer scale]; } if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) { // Constants to adjust the max/min values of zoom CGFloat kMaxScale = 1.0; CGFloat kMinScale = 1.0; gestureRecognizer.view.alpha = 1/currentScale; if ([gestureRecognizer view] == [self.firstView view]) { kMaxScale = 10.0; kMinScale = 1.0; gestureRecognizer.view.alpha = 1/currentScale; } if ([gestureRecognizer view] == [self.pageView view]) { kMaxScale = 1.0; kMinScale = 0.1; gestureRecognizer.view.alpha = currentScale; } // NSLog(@"Current Scale is %f",[gestureRecognizer scale]); CGFloat newScale = 1 - (lastScale - [gestureRecognizer scale]); newScale = MIN(newScale, kMaxScale / currentScale); newScale = MAX(newScale, kMinScale / currentScale); CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale); [gestureRecognizer view].transform = transform; lastScale = [gestureRecognizer scale]; // Store the previous scale factor for the next pinch gesture call } if([gestureRecognizer state] == UIGestureRecognizerStateEnded){ if ([gestureRecognizer view] == [self.firstView view]) { if(currentScale > 1.0f){ [self setPinchOutAnimationHidden:YES]; } else{ [self setPinchOutAnimationHidden:NO]; } } else{ if(currentScale < 0.9f){ [self setPinchInAnimationToHidden:YES]; } else{ [self setPinchInAnimationToHidden:NO]; } } } } - (void)setPinchInAnimationToHidden: (BOOL)shouldHide{ if(shouldHide){ NSLog(@"animation 1 - pinch in"); [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ CGAffineTransform transform = CGAffineTransformScale([self.pageView.view transform], 0, 0); self.pageView.view.transform = transform; } completion:^(BOOL finished){ // [firstView.view sendSubviewToBack:pageView.view]; NSLog(@"animation 1 - pinchin completion handler"); [self.view insertSubview:self.pageView.view belowSubview:self.firstView.view]; self.pageView.view.transform = CGAffineTransformMakeScale(1.0, 1.0); self.pageView.view.alpha = 1.0; }]; } else{ NSLog(@"animation 2- pinch in"); [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.pageView.view.transform = CGAffineTransformMakeScale(1.0, 1.0); self.pageView.view.alpha = 1.0; } completion:nil]; } } - (void)setPinchOutAnimationHidden: (BOOL)shouldHide{ if(shouldHide){ NSLog(@"animation 3 - pinch out"); // firstView = [ViewFactory firstViewController]; [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ CGAffineTransform transform = CGAffineTransformScale([self.firstView.view transform], 15.0, 15.0); self.firstView.view.transform = transform; self.firstView.view.alpha = 0.0; } completion:^(BOOL finished){ NSLog(@"animation 3 - pinch out - completion handler"); //[pageView.view sendSubviewToBack:firstView.view]; [self.view insertSubview:self.firstView.view belowSubview:self.pageView.view]; self.firstView.view.transform = CGAffineTransformMakeScale(1.0, 1.0); self.firstView.view.alpha = 1.0; }]; } else{ NSLog(@"animation 4- pinch out"); [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.firstView.view.transform = CGAffineTransformMakeScale(1.0, 1.0); self.firstView.view.alpha = 1.0; } completion:nil]; } }


La vista no reconoce el gusano.

Registra tu guesture para reconocer los estados.

UIPinchGestureRecognizer *pinchGuestureRecog = [UIPinchGestureRecognizer alloc]initWithTarget:self action: @selector(scaleHandler:)];