uiimageview的长按手势和移动?

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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];


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

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

编码愉快!!!!

【讨论】:

以上是关于uiimageview的长按手势和移动?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton上的长按手势识别器?

SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为

SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为

SwiftUI手势(Gesture)进阶 : 实现任意视图的长按惯性加速行为

Vue 移动端的长按与触摸事件

向 Scrollview 内的 UIImageView 添加长按手势