触发 UIButton 时如何获取 touchesBegan 坐标?

Posted

技术标签:

【中文标题】触发 UIButton 时如何获取 touchesBegan 坐标?【英文标题】:How do you get the touchesBegan coordinates when a UIButton is triggered? 【发布时间】:2010-12-22 05:57:24 【问题描述】:

我设置了一个 touchesBegan 方法,用于在用户触摸屏幕时获取坐标。它工作得很好,除非我触摸 UIButton。如何使按钮也触发 touchesBegan 方法?

【问题讨论】:

【参考方案1】:

为按钮添加事件处理程序,如下所示,

[myButton addTarget:self action:@selector(dragBegan:withEvent:) forControlEvents: UIControlEventTouchDown];
[myButton addTarget:self action:@selector(dragMoving:withEvent:) forControlEvents: UIControlEventTouchDragInside];
[myButton addTarget:self action:@selector(dragEnded:withEvent:) forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchUpOutside];

如下处理事件,你可以从事件ev中获取接触点如下,

- (void)dragBegan:(UIControl *)c withEvent:ev 
    NSLog(@"dragBegan......");
    UITouch *touch = [[ev allTouches] anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];
    NSLog(@"Touch x : %f y : %f", touchPoint.x, touchPoint.y);


- (void)dragMoving:(UIControl *)c withEvent:ev 
    NSLog(@"dragMoving......");


- (void)dragEnded:(UIControl *)c withEvent:ev 
    NSLog(@"dragEnded......");

这不是我自己的答案。我从http://sree.cc/iphone/handling-touche-events-for-uibuttons-in-iphone 得到了这段代码,并做了一些小改动。

【讨论】:

【参考方案2】:

尝试重写 UIButton 类并在 touchesBegan 方法中调用 [super touchesBegan..]。

【讨论】:

以上是关于触发 UIButton 时如何获取 touchesBegan 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

UIbutton 长按和 Touch Up 里面

如何使用 Cocoa Touch 动态创建 UIButton?

如何在按下其他 UIButton 时触发 UIButton 的“按下效果”或“突出显示效果”

如何以编程方式更改UIButton标签

如何将 UIButton 设置为 Touch ID 或 Face ID 图像

如何在 Touch Down 实现时防止 SwiftUI 上的重新触发