2012-02-04 3 views
0

Я пытаюсь создать приложение, в котором UIButtons можно окутать и отбросить при запуске жестов UILongPressGestureRecognizer. На самом деле мое приложение отлично работает на любом iPad. он создает проблему только в iPhone и ниже, чем у iOS 5.0, что отлично работает на iPhone с iOS 5.0.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; 
    } 
} 

У меня есть 2 устройства iPhone 3G с iOS 4.2.1 и iPhone 4 с 5.0. Эта функциональность отлично работает в iPhone 4 с iOS 5.0, но не работает должным образом в iPhone 3g с iOS 4.2.1. Иногда он работает в iPhone 3g, но иногда он не вызывает методы делегата.

Сообщите мне, если у вас есть решение для этого.

Спасибо!

ответ

2

Является ли метод делегата вообще не вызванным или не выбран случай? Я не знаю, если это действительно решает проблему, но вы должны исправить ваши switch (взять бабло в случае по умолчанию):

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

    default: 
     break; 
} 
+0

Благодаря это работало, но в iPhone 3g метод делегата «moveActionGestureRecognizerStateChanged» называют иногда , поэтому он не работает когда-то. дайте мне знать, если я что-то упустил в этом. –