如何在自定义UIButton上获取分接头坐标?

时间:2012-08-07 14:16:01

标签: ios xcode ipad uibutton storyboard

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

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

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

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

- (IBAction)getButtonClick:(id)sender;

和.m文件中的代码:

    - (IBAction)getButtonClick:(id)sender {

        NSLog(@"Image Clicked.");
    }

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

如何获取水龙头的坐标?

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

3 个答案:

答案 0 :(得分:29)

要获取触摸位置,您可以使用按钮操作方法的另一种变体:myAction:forEvent:(如果您从IB界面中创建它,请在参数字段中注明“发件人和事件”选项:enter image description here

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

- (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方法创建该点。现在,根据您要记录触摸的时间 - 当用户触摸时,或者当他们抬起手指时 - ,您必须使用touchesBegantouchesEnded方法实现此代码。假设您执行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