如何确定UIView当前是否被触摸?
问题描述:
有没有办法可以查询UIView,以确定它目前是否被触摸?我问的原因是因为我正在使用“已触及的开始”,“触摸已结束”和“触摸移动”来将UIView保留在用户的手指下。但是,如果用户非常快地移动他/她的手指并设法“逃离”窗口,我想移除该窗口。
我在想我可以使用定时器来定期测试每个视图,以确定它是否正在被触摸,如果不是,我将删除它。一个“IsTouchedProperty”将是完美的。 有什么想法?如何确定UIView当前是否被触摸?
答
我有一个类似的问题,并通过使用tracking
属性解决它。从文档:
一个布尔值,指示接收方当前是否在跟踪与事件相关的触摸 。 (只读)
这是UIControl的一个方法,但是你不是试图创建一个吗?
您还可以hitTest
的意见。检查the apple docs
答
由于UIView不从UIControl继承,所以您需要继承UIView并使用触摸事件来滚动您自己的isTouching
属性。例如:
// MyView.h
@interface MyView : UIView
@property (nonatomic, assign) BOOL isTouching;
@end
// MyView.m
...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
self.isTouching = YES;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesCancelled:touches withEvent:event];
self.isTouching = NO;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
self.isTouching = NO;
}
只是说明这并不完全正确。 isTouchInside和isTracking不是UIView的一部分。他们来自UIControl – ChickensDontClap 2012-12-15 17:54:35
你是完全正确的。我更新了我的答案。 – Tom 2013-12-08 18:32:33
isTracking也是UIScrollView的一部分 – phatmann 2018-01-19 19:20:38