无需从屏幕上移开手指即可触摸按钮

Posted

技术标签:

【中文标题】无需从屏幕上移开手指即可触摸按钮【英文标题】:Touch button without removing finger from screen 【发布时间】:2012-11-12 12:33:20 【问题描述】:

有没有一种方法可以检测 UIButton 内部的触摸而不需要用户从屏幕上移开手指?

示例: 如果您有两个按钮,并且用户点击了左侧的一个,然后将手指拖到右侧,则应用程序必须识别出您正在点击右侧的按钮。

【问题讨论】:

【参考方案1】:

您应该能够使用已经存在的按钮事件来执行此操作。例如“Touch Drag Outside”、“Touch Up Outside”、“Touch Drag Exit”等

只需注册这些活动,看看哪些活动适合您的需求。

【讨论】:

是的,这比我的要好,但本质上是一样的。我不知道 Touch Drag Inside 和 Touch Drag Outside 等等...【参考方案2】:

我会使用 UIViewController 自己实现。

而不是使用按钮。

在屏幕上放置两个视图(每个按钮一个)您可以制作这些按钮、imageViews 或只是 UIViews,但要确保它们有 userInteractionEnabled = NO;

然后在 UIViewController 中使用方法touchesBegantouchesMoved

我会在 viewController 中保存一些状态,比如...

BOOL trackTouch;
UIView *currentView;

那么如果 touchesBegan 在您的某个视图中...

-(void)touchesBegan... (can't remember the full name)

    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    if (CGRectContainsPoint(firstView, point)) 
        trackTouch = YES
        //deal with the initial touch...
        currentView = firstView;  (work out which view you are in and store it)
     else if (CGRectContainsPoint(secondView, point)) 
        trackTouch = YES
        //deal with the initial touch...
        currentView = secondView;  (work out which view you are in and store it)
    

然后在 touchesMoved...

- (void)touchesMoved... (can't remember the full name)

    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    if (CGRectContainsPoint(secondView, point) and currentView != secondView)) 
        // deal with the touch swapping into a new view.
        currentView = secondView;
     else if (CGRectContainsPoint(firstView, point) and currentView != firstView)) 
        // deal with the touch swapping into a new view.
        currentView = firstView;
    

反正就是这样。

【讨论】:

以上是关于无需从屏幕上移开手指即可触摸按钮的主要内容,如果未能解决你的问题,请参考以下文章

当用户触摸屏幕时,删除图像上的模糊效果[关闭]

UIResponder 类中的触摸事件响应方法

将触摸事件从 UIVew 传输到 UIScrollView

移动端js触摸事件大全

移动端常用触摸事件以及常用坐标

IOS键盘输入屏幕上移