我在iPad上使用XCode 4.4开发iOS 5,并在创建自定义按钮时使用Storyboard布局。
我的触摸事件正常工作和记录,但现在我想获得点击我的自定义按钮的x / y坐标。
如果可能的话,我希望坐标相对于自定义按钮而不是相对于整个iPad屏幕。
这是我在.h文件中的代码:
- (IBAction)getButtonClick:(id)sender;
和.m文件中的代码:
- (IBAction)getButtonClick:(id)sender {
NSLog(@"Image Clicked.");
}
就像我说的那样,当我点击图像时正确记录。
如何获取水龙头的坐标?
我在互联网上尝试了一些不同的例子,但是当它在日志框中显示一堆数字(可能是坐标)时它们总是会冻结。我是iOS开发的新手,所以请尽可能简单。谢谢!
答案 0 :(得分:29)
要获取触摸位置,您可以使用按钮操作方法的另一种变体:myAction:forEvent:
(如果您从IB界面中创建它,请在参数字段中注明“发件人和事件”选项:)
然后在您的操作处理程序中,您可以从事件参数获取触摸位置,例如:
- (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event {
NSSet *touches = [event touchesForView:sender];
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:sender];
NSLog(@"%@", NSStringFromCGPoint(touchPoint));
}
答案 1 :(得分:1)
包含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)")
}
答案 2 :(得分:0)
对于您的整体坐标(参考屏幕),您需要创建一个包含触摸坐标的CGPoint
。但要做到这一点,你需要先触摸它。首先,获取触摸事件,然后使用locationInView
方法创建该点。现在,根据您要记录触摸的时间 - 当用户触摸时,或者当他们抬起手指时 - ,您必须使用touchesBegan
或touchesEnded
方法实现此代码。假设您执行touchesEnded
,它会传递包含所有触摸事件的NSSet cales“touches”。
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);
那应该输出触摸的坐标。现在让它参考你正在使用的任何按钮,我建议你只需从该点手动减去按钮坐标的值。这似乎是一个简单的解决方案,老实说,我不知道如何通过引用另一个对象获取坐标,除非您根据该对象创建视图,并将其传递给locationInView
而不是{{1} }。
有关触摸的更多信息,有一套很棒的教程here。