【问题标题】:Long Press gesture and movement of uiimageview?uiimageview的长按手势和移动?
【发布时间】:2013-07-24 11:48:25
【问题描述】:

我有一个UIImageView 和一个UILongPressGestureRecognizer,当检测到长按时发送一个动作。

我确实在UIImageView 上启用了用户交互。但是,我也有一种手动滚动,可以使用 touchesBegan 和 touchesMoved 方法移动 UIImageView。

当用户交互被禁用时,只有滚动起作用。启用用户交互后,只有长按手势识别器起作用。

我怎样才能使两者同时工作?

如果需要可以共享代码,但我认为这个问题不需要它。

【问题讨论】:

    标签: iphone ios objective-c long-press


    【解决方案1】:
    UILongPressGestureRecognizer *gestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
    [gestureRecognizer addTarget:self action:@selector(imgLongPressed:)];
    gestureRecognizer.delegate = self;
    [imgview addGestureRecognizer: gestureRecognizer];
    
    - (void) imgLongPressed:(UILongPressGestureRecognizer*)sender
    {
        UIImageView *view_ =(UIImageView*) sender.view;
        CGPoint point = [sender locationInView:view_.superview];
    
        if (sender.state == UIGestureRecognizerStateBegan)
        {
    
        }
        else if (sender.state == UIGestureRecognizerStateChanged)
        {
    
        }
        else if (sender.state == UIGestureRecognizerStateEnded)
        {
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      手势识别器始终优先并覆盖touchesBegan: 样式事件。您必须使用相同的 API/技术来实现这两种行为。

      【讨论】:

        【解决方案3】:

        首先,您必须使用手势来移动图像,如下所示。

         UIPanGestureRecognizer  *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
        [panRecognizer setMinimumNumberOfTouches:1];
        [panRecognizer setMaximumNumberOfTouches:1];
        [panRecognizer setDelegate:self];
        [vwBigImage addGestureRecognizer:panRecognizer];
        

        将被调用的函数如下..

         -(void)move:(id)sender {
        
        CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:yourview];
        
        if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
            _firstX = [yourimageview center].x;//declare CGFloat _firstX; in .h file
        
            _firstY = [yourimageview center].y;//declare CGFloat _firstY; in .h file
        }
        
        translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
        [yourimageview setCenter:translatedPoint];
        
        }
        

        现在你的两个手势都会被调用。

        让我知道它是否有效!!!

        编码愉快!!!!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-30
          • 2016-04-05
          • 1970-01-01
          相关资源
          最近更新 更多