如何获得自定义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触摸的时间 – 当用户触摸下来,或者当他们抬起手指时 – 你必须在touchesBegan
或touchesEnded
方法中实现这个代码。 假设你做了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
。
有关触摸的更多信息,这里有一套很棒的教程。