触发 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 坐标?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cocoa Touch 动态创建 UIButton?
如何在按下其他 UIButton 时触发 UIButton 的“按下效果”或“突出显示效果”