2011-08-03 3 views
0

그래서 뷰에서 가져온 이미지를 이동/비율 조정할 수있는 간단한 iPhone 앱을 만들고 있습니다. 이 작업을 수행하기 위해 @paulsolt의 코드와 함께 UIGestureRecognizers를 사용하고 있습니다. 그것은 위대한 작품. 내가 겪고있는 유일한 문제는 화면을 건드리지 않았거나 잠시 동안 다른 작업을 수행 한 후에 객체를 이동하려고 할 때 발생합니다. 부드럽게 움직이기 전에 약간의 딸꾹질이 있습니다.UIPanGestureRecognizer는 이미지가 약간 유휴 상태 일 때 움직이기 전에 걸릴 수 있습니다.

누구든지이 문제를 해결하는 방법을 알고 있습니까? 이 [panGesture setMaximumNumberOfTouches:2];을하기 때문에

- (void)addGestureRecognizersToView:(UIView *)theView { 
      theView.userInteractionEnabled = YES; // Enable user interaction 

      UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; 
      [panGesture setMaximumNumberOfTouches:2]; 
      [panGesture setDelegate:self]; 
      [theView addGestureRecognizer:panGesture]; 
      [panGesture release]; 


      UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; 
      [theView addGestureRecognizer:pinchGesture]; 
      [pinchGesture release]; 
     } 


    - (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer { 

      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) { 

       CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue]; 

       // Constants to adjust the max/min values of zoom 
       const CGFloat kMaxScale = 1.5; 
       const CGFloat kMinScale = 1.0; 
       const CGFloat kSpeed = 0.75; 

       CGFloat newScale = 1 - (lastScale - [gestureRecognizer scale]) * (kSpeed); 
       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 
      } 
     } 

    - (void)handlePanGesture:(UIPanGestureRecognizer *)gestureRecognizer { 

     UIView *myView = [gestureRecognizer view]; 

     CGPoint translate = [gestureRecognizer translationInView:[myView superview]]; 


     if ([gestureRecognizer state] == UIGestureRecognizerStateChanged || [gestureRecognizer state] == UIGestureRecognizerStateChanged) { 
      [myView setCenter:CGPointMake(myView.center.x + translate.x, myView.center.y + translate.y)]; 
     [gestureRecognizer setTranslation:CGPointZero inView:[myView superview]]; 
     } 
    } 

답변

0

imagepicker가 iPhone 카메라로 찍은 사진을 선택하면 이런 현상이 발생합니다. 다른 이미지의 경우 제대로 작동하는 것 같습니다. 이 문제를 해결하는 방법을 모릅니다.

0

아마, 현재의 행동이보기를 이동하기 전에 곤란하게되지 않도록해야한다?

+0

@danielle님께 감사드립니다. 실제로 최대 접촉 수를 1로 설정했지만 여전히 동일한 동작을 보입니다. –

관련 문제