2012-02-28 37 views
1

有没有办法可以查询UIView,以确定它目前是否被触摸?我问的原因是因为我正在使用“已触及的开始”,“触摸已结束”和“触摸移动”来将UIView保留在用户的手指下。但是,如果用户非常快地移动他/她的手指并设法“逃离”窗口,我想移除该窗口。
我在想我可以使用定时器来定期测试每个视图,以确定它是否正在被触摸,如果不是,我将删除它。一个“IsTouchedProperty”将是完美的。 有什么想法?如何确定UIView当前是否被触摸?

回答

1

我有一个类似的问题,并通过使用tracking属性解决它。从文档:

一个布尔值,指示接收方当前是否在跟踪与事件相关的触摸 。 (只读)

这是UIControl的一个方法,但是你不是试图创建一个吗?

您还可以hitTest的意见。检查the apple docs

+2

只是说明这并不完全正确。 isTouchInside和isTracking不是UIView的一部分。他们来自UIControl – ChickensDontClap 2012-12-15 17:54:35

+0

你是完全正确的。我更新了我的答案。 – Tom 2013-12-08 18:32:33

+0

isTracking也是UIScrollView的一部分 – phatmann 2018-01-19 19:20:38

1

由于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; 
}