繁体   English   中英

iOS检测用户何时停止触摸UIImageView

[英]IOS detect when user stops touching UIImageView

任何想法如何做到这一点? 我的UITableView的每个单元格内都有一个UIImageView ,我想在用户开始触摸UIImageView时禁用滚动,一旦用户停止在照片上拖动手指就启用它。

我只是给出我的逻辑。

UIPanGestureRecognizer添加到UITableView.每个单元格UITableView.

UIPanGestureRecognizer* panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[cell addGestureRecognizer:panGestureRecognizer];

在方法名称中是handlePanFrom:

 - (void)handlePanFrom:(UIPanGestureRecognizer*)recognizer 
{

    CGPoint translation = [recognizer translationInView:recognizer.view];
    CGPoint velocity = [recognizer velocityInView:recognizer.view];

    if (recognizer.state == UIGestureRecognizerStateBegan) 
    {
      /// track began
      tableView.userInteractionEnabled = NO;    
    } 
    else if (recognizer.state == UIGestureRecognizerStateChanged) 
    {
        // track the movement
    } else if (recognizer.state == UIGestureRecognizerStateEnded) 
    {
        //  final position
        tableView.userInteractionEnabled = YES;
    }
 }

确保您的UIIMageView必须设置为userInteractionEnabled = YES; 因为默认情况下, UIIMageView必须设置userInteractionEnabled = NO;.

有两种方法可以实现此目的,或者将UITapGestureRecognizerUIPanGestureRecognizerUIImageView并设置目标和操作,其中target是您的自定义UITableViewCell类或包含

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

UIImageView自定义类中的方法,并通过协议将委托设置为自定义UITableViewCell

对于UIGestureRecognizer ,可以在开关的帮助下检查其状态属性UIGestureRecognizer类参考以了解状态

typedef enum {
   UIGestureRecognizerStatePossible,

   UIGestureRecognizerStateBegan,
   UIGestureRecognizerStateChanged,
   UIGestureRecognizerStateEnded,
   UIGestureRecognizerStateCancelled,

   UIGestureRecognizerStateFailed,

   UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
} 

最后,通过切换UITableView的scrollEnabled属性来停止并开始滚动,其中UITableViewUIScrollView的子类。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if ([touch.view isKindOfClass:[UIImageView class]]) {
        NSLog(@"self.tableView.scrollEnabled = NO");
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    if ([touch.view isKindOfClass:[UIImageView class]]) {
        NSLog(@"self.tableView.scrollEnabled = YES");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM