[英]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;.
有两种方法可以实现此目的,或者将UITapGestureRecognizer
或UIPanGestureRecognizer
到UIImageView
并设置目标和操作,其中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属性来停止并开始滚动,其中UITableView
是UIScrollView
的子类。
- (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.