11

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

我的触摸事件正常工作和记录,但现在我想在我的自定义按钮上获取点击的 x/y 坐标。

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

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

- (IBAction)getButtonClick:(id)sender;

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

    - (IBAction)getButtonClick:(id)sender {

        NSLog(@"Image Clicked.");
    }

就像我说的,当我点击图像时,它会正确记录。

如何获取水龙头的坐标?

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

4

3 回答 3

30

要获得触摸位置,您可以使用按钮操作方法的另一种变体:(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));
}
于 2012-08-07T14:25:18.450 回答
2

在 Swift 3.0 的情况下,接受的答案相同,但语法将更改如下:

斯威夫特 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)")
  }
于 2017-03-27T09:40:08.970 回答
0

对于您的整体坐标(参考屏幕),您需要创建一个CGPoint包含触摸坐标的坐标。但要做到这一点,你需要先接触到这一点。因此,从获取触摸事件开始,然后使用该locationInView方法说明这一点。现在,根据您想要记录触摸的时间——用户向下触摸或抬起手指的时间——你必须在touchesBeganortouchesEnded方法中实现此代码。假设你这样做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而不是self.view.

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

于 2012-08-07T16:06:37.557 回答