0

我正在尝试创建一个应用程序,当触发 UILongPressGestureRecognizer 手势时,可以在其中拖放 UIButtons。实际上我的应用程序在任何 iPad 上都可以正常工作。它仅在 iPhone 中产生问题并且低于 iOS 5.0 意味着它在带有 iOS 5.0 的 iPhone 中工作正常。

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。此功能在装有 iOS 5.0 的 iPhone 4 中运行良好,但在装有 iOS 4.2.1 的 iPhone 3g 中无法正常运行。有时它在 iPhone 3g 中工作,但有时它不调用委托方法。

如果您对此有任何解决方案,请告诉我。

谢谢!

4

1 回答 1

2

是根本没有调用委托方法,还是没有选择案例?我不知道这是否真的解决了你的问题,但你应该修复你的switch(在默认情况下抢夺):

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

    default:
        break;
}
于 2012-02-05T12:36:47.807 回答