UIView:如何检查触摸是否在它们开始的同一视图内结束

时间:2011-04-23 02:35:35

标签: uiview three20 uitouch touchesbegan

AcaniUsers中,我在ThumbView : UIView内创建了UITableView个实例的网格。所有thumbViews的宽度均为kThumbSize。如何检测触摸是否在它们开始的同一视图内结束?

2 个答案:

答案 0 :(得分:3)

以下作品,但我不确定这是否是最佳方式。我想是这样的。

由于所有thumbViews的宽度均为kThumbSize,因此只需检查touchesEnded locationInView实例的UITouch的x坐标(假设self.multipleTouchEnabled = NO kThumbSize)小于或等于thumbView。这意味着触摸在tableView内结束。无需检查y坐标,因为如果触摸垂直移动,则包含thumbViews的{​​{1}}会滚动并触摸将被取消。

ThumbView : UIView(其实例是UITableView的子视图)中执行以下操作:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touchesEnded %@", touches);
    CGPoint touchPoint = [[touches anyObject] /* only one */ locationInView:self];
    if (touchPoint.x >= 0.0f && touchPoint.x <= kThumbSize) {
        [(ThumbsTableViewCell *)self.superview.superview thumbTouched:self];
    }
}

要一次仅在一个thumbView上注册触摸,您还可能希望在self.exclusiveTouch = YES;的{​​{1}}实例方法中设置init

答案 1 :(得分:2)

在您使用的视图扩展中;

迅速4:

open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesEnded(touches, with: event)
    guard let touchPoint = touches.first?.location(in: self) else { return }
    guard self.bounds.contains(touchPoint) else { return }
    // Do items for successful touch inside the view
}