2014-06-20 6 views
0

버튼에 팬 제스처를 추가했습니다. 추가 코드없이 이동하면 모든 것이 정상적으로 처리되지만 아래 예제에서 주석 처리 된 일부 코드를 추가하면 버튼이 시작됩니다. 원점 위치로 재설정.팬 제스처 인식기 재설정

왜 이런 일이 발생합니까? 이것에 대한 이유는 무엇입니까? 당신을 위해 다른 일 후

CGPoint translation = [recognizer translationInView:self.view]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

을 : first second

답변

0

당신이 에 추가 한 코드

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 
switch([recognizer state]){ 
    case UIGestureRecognizerStateBegan: { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [button setFrame:recognizer.view.frame]; 
     [button setBackgroundColor: [UIColor redColor]]; 

//  [self.view insertSubview:button belowSubview:recognizer.view]; 
     _tempButton = button; 

    }break; 
    case UIGestureRecognizerStateChanged: { 

     CGPoint translation = [recognizer translationInView:self.view]; 
     recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); 
     [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

    }break; 
} 
} 

는 액션 메소드의 헤더에 이동, 경우를 UIGestureRecognizerStateChanged 스위치 방법으로 다른 사례를 만드는 것입니다 :

//This checks if you ended the pan gesture (removed finger from object) 
case UIGestureRecognizerStateEnded: 
{ 
    CGPoint velocity = [recognizer 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(recognizer.view.center.x + (velocity.x * slideFactor), 
           recognizer.view.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:^{ 
    recognizer.view.center = finalPoint; 
    } completion:nil]; 
} 

그래서 위의 내용은 입니다. UIGestureRecognizerStateEnded 상태는 사용자가 이미지를 보낸 마지막 지점을 취한 것입니다. 그 후, 저는 이미지의 중심을 이미지가 마지막 순간과 같게 설정했습니다. 이제 이미지는 이전 포인트로 되돌아 가지 않지만 사용자가 가져갈 위치에 남아있게됩니다.