2012-02-04 3 views
0

UILongPressGestureRecognizer 제스처가 실행될 때 UIButtons를 드래그 앤 드롭 할 수있는 앱을 만들려고합니다. 사실 내 애플은 모든 iPad에서 잘 작동합니다. iPhone에만 문제가 생기고 iOS 5.0이 설치된 iPhone보다 낮습니다.UILongPressGestureRecognizer가 작동하지 않습니다.

UILongPressGestureRecognizer * gesture = [[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector(moveActionGestureRecognizerStateChanged:)]; 
gesture.minimumPressDuration = 0.5; 
gesture.delegate = self; 
[self.dragView addGestureRecognizer: gesture]; 
[gesture release]; 

- (void) moveActionGestureRecognizerStateChanged: (UILongPressGestureRecognizer *) recognizer 
{ 
    switch (recognizer.state) 
    { 
     default: 
     case UIGestureRecognizerStateFailed: 
     { 
      dragView.alpha=1.0; 
      [dragView release]; 
      dragView=nil; 
      break; 
     } 
     case UIGestureRecognizerStatePossible: 
     { 
       dragView.alpha=0.8; 
      dragView.frame=CGRectMake(dragView.frame.origin.x, dragView.frame.origin.y, dragView.frame.size.width, dragView.frame.size.height); 
     } 
     case UIGestureRecognizerStateCancelled: 
     { 
      dragView.alpha=1.0; 
      [dragView release]; 
      dragView=nil; 
      break; 
     }    
     case UIGestureRecognizerStateEnded: 
     { 
      //Set dragView on target position 

      break; 
     } 
     case UIGestureRecognizerStateBegan: 
     { 
      //NSLog(@"Began"); 
      dragView.alpha=0.8;   
      dragView.frame=CGRectMake(dragView.frame.origin.x, dragView.frame.origin.y, dragView.frame.size.width, dragView.frame.size.height); 
      [self bringSubviewToFront:dragView]; 
      break; 
     }   
     case UIGestureRecognizerStateChanged: 
     { 
      [self.view bringSubviewToFront:dragView]; 
      CGPoint offset = [recognizer locationInView: self.scrollView]; 
      dragView.frame=CGRectMake(offset.x, offset.y, dragView.frame.size.width, dragView.frame.size.height); 
     }    
      break; 
    } 
} 

iOS 4.2.1 및 iPhone 4 5.0이 장착 된 2 대의 iPhone 3G가 있습니다. 이 기능은 iOS 5.0이 설치된 iPhone 4에서 제대로 작동하지만 iOS 4.2.1이 설치된 iPhone 3g에서는 제대로 작동하지 않습니다. 때로는 iPhone 3g에서 작동하지만 때로는 대리자 메서드를 호출하지 않습니다.

해결 방법이 있으면 알려주십시오.

감사합니다.

답변

2

대리자 메서드가 전혀 호출되지 않았거나 대/소문자를 선택하지 않았습니까? 이건 정말 문제가 해결되는지는 모르겠지만, 당신은 당신의 switch (기본 케이스에서 전리품을 가지고) 수정해야합니다 :이 일을하지만 대리자 메서드는 "moveActionGestureRecognizerStateChanged"아이폰 3G에서

switch (recognizer.state) 
{ 
    case someCase: 
    { 
     // ... 
     break; 
    } 

    default: 
     break; 
} 
+0

감사이라고도한다 . 그래서 언젠가는 작동하지 않습니다. 내가 뭔가를 놓친다면 알려줘. –

관련 문제