如果移出 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 取消现有的触摸?