如果移出 CGPoint 则取消触摸

Posted

技术标签:

【中文标题】如果移出 CGPoint 则取消触摸【英文标题】:Cancel touches if it moves out CGPoint 【发布时间】:2014-02-13 09:59:18 【问题描述】:

我的RootController 的中心有一个 400x400 UIViewController(我们称之为 ViewB)。在ViewB 里面我很少有UIButton (自定义UIButton 类与触摸UIResponder 方法)。

我可以移动按钮,但是当触摸离开 ViewB 时,按钮会取消触摸!

我真正想要的是完全取消触摸并将按钮留在ViewB的边缘附近。

【问题讨论】:

你如何移动按钮?您可以将 MIN 和 MAX 点设置为按钮并将其限制在 ViewB 边界内。 你需要检测 ViewB 的 superView 上的触摸,并从那里移动按钮 @Akhilrajtr:这是否意味着我必须检查 Min & Max on touch 移动方法?像这样: - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event float x = self.frame.origin.x;浮动 y = self.frame.origin.y; if (x438) //取消触摸 @Basheer_CAD :我明白你的意思,但是应用程序是这样开发的,所有的触摸都在 UIButton 对象中处理。 @Danialzo 你能在- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event中显示代码吗? 【参考方案1】:

试试这个,

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

    UITouch *touch = [[event allTouches] anyObject];
    ....
    CGRect viewBFrame = ViewB.view.frame;
    CGRect buttonToRect = //calculated button frame
    CGPoint buttonOrigin = buttonToRect.origin;
    CGFloat xMax = CGRectGetWidth(viewBFrame) - CGRectGetWidth(buttonToRect);
    CGFloat yMax = CGRectGetHeight(viewBFrame) - CGRectGetHeight(buttonToRect);
    buttonOrigin.x = MAX(0, buttonOrigin.x);
    buttonOrigin.x = MIN(xMax, buttonOrigin.x);

    buttonOrigin.y = MAX(0, buttonOrigin.y);
    buttonOrigin.y = MIN(yMax, buttonOrigin.y);

    //set buttonToRect to Button


注意:假设按钮是ViewB的子视图

【讨论】:

以上是关于如果移出 CGPoint 则取消触摸的主要内容,如果未能解决你的问题,请参考以下文章

允许触摸表格单元格以取消其他当前触摸

如果按下子视图的按钮,如何取消 UIGestureRecognizer

如何告诉 UIGestureRecognizer 取消现有的触摸?

你可以在 touchesBegan 之后强制取消触摸事件吗?

取消IE9触摸滚动事件并调用Mousemove,可能吗?

iOS:使用 2 个手指时取消 UIScrollView 触摸