UILongPressGestureRecognizer не работает - PullRequest
0 голосов
/ 04 февраля 2012

Я пытаюсь создать приложение, в котором можно перетаскивать UIB-кнопки при срабатывании жеста UILongPressGestureRecognizer.На самом деле мое приложение работает нормально на любом iPad.это создает проблему только в iPhone и ниже, чем в iOS 5.0, и отлично работает в iPhone с iOS 5.0.

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, но иногда он не вызывает методы делегата.

Дайте мне знать, если у вас есть какое-либо решение для этого.

Спасибо!

1 Ответ

2 голосов
/ 05 февраля 2012

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

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

    default:
        break;
}
...