如何获得自定义UIButton上的水龙头坐标?

我在iPad上使用为iOS 5开发的XCode 4.4,并在创build自定义button时使用Storyboard布局。

我有触摸事件正确的工作和日志logging,但现在我想要得到我的自定义button上的水龙头的x / y坐标。

如果可能,我希望坐标相对于自定义button,而不是相对于整个iPad屏幕。

这是我在.h文件中的代码:

- (IBAction)getButtonClick:(id)sender; 

和我的代码在.m文件中:

  - (IBAction)getButtonClick:(id)sender { NSLog(@"Image Clicked."); } 

就像我说的那样,当我点击图像时,正确logging。

我怎样才能得到水龙头的坐标?

我已经尝试了一些来自互联网的不同例子,但是当它在日志框中显示一堆数字(也许是坐标)时,它们总是会冻结。 我是非常新的iOS开发,所以请尽可能简单。 谢谢!

要获得触摸位置,您可以使用另一种button操作方法的变体: myAction:forEvent:如果您从IB界面中创build注释“发件人和事件”选项在参数字段中: 在这里输入图像说明

然后在您的动作处理程序中,您可以从事件参数获取触摸位置,例如:

 - (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event { NSSet *touches = [event touchesForView:sender]; UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:sender]; NSLog(@"%@", NSStringFromCGPoint(touchPoint)); } 

Swift 3.0版的接受的答案工作相同,除了语法将改变如下:

Swift 3.0:

  @IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) { let myButton = sender as! UIButton let touches = event.touches(for: myButton) let touch = touches?.first let touchPoint = touch?.location(in: myButton) print("touchPoint\(touchPoint)") } 

对于您的整体坐标(参考屏幕),您需要创build一个包含触摸坐标的CGPoint 。 但是为了做到这一点,你需要首先得到这个接触。 因此,首先获取触摸事件,然后使用locationInView方法创build该点。 现在,取决于你想logging触摸的时间 – 当用户触摸下来,或者当他们抬起手指时 – 你必须在touchesBegantouchesEnded方法中实现这个代码。 假设你做了touchesEnded ,它通过一个NSSet cales“触摸”包含所有触摸事件。

 UITouch *tap = [touches anyObject]; CGPoint touchPoint = [tap locationInView:self.view]; 

“touchPoint”现在将包含用户提起手指的点。 要打印出坐标,只需访问该点的x和y属性:

 CGFloat pointX = touchPoint.x; CGFloat pointY = touchPoint.y; NSLog(@" Coordinates are: %f, %f ", pointX, pointY); 

这应该输出触摸的坐标。 现在让它被引用到你正在使用的任何button上,我build议你只需从这个点上减去button坐标的值。 这似乎是一个简单的解决scheme,老实说,我不知道一种方法获取坐标引用另一个对象,除非你做一个基于该对象的视图,并传递给locationInView而不是self.view

有关触摸的更多信息,这里有一套很棒的教程。