33

所以我有一个大的UIButton,它是一个UIButtonTypeCustom,并且按钮目标是调用的UIControlEventTouchUpInside。我的问题是如何确定UIButton触摸发生的位置。我想要这个信息,这样我就可以从触摸位置显示一个弹出窗口。这是我尝试过的:

UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);

和其他各种迭代。按钮的目标方法通过以下方式从中获取信息sender

    UIButton *button = sender;

那么有什么办法可以使用类似的东西:button.touchUpLocation

我在网上查了一下,找不到类似的东西,所以提前谢谢。

4

2 回答 2

60
UITouch *theTouch = [touches anyObject];
CGPoint where = [theTouch locationInView:self];
NSLog(@" touch at (%3.2f, %3.2f)", where.x, where.y);

这是正确的想法,除了这段代码可能在你的视图控制器的一个动作中,对吧?如果是这样,则self指的是视图控制器而不是按钮。您应该将指向按钮的指针传递给-locationInView:.

这是您可以在视图控制器中尝试的经过测试的操作:

- (IBAction)buttonPressed:(id)sender forEvent:(UIEvent*)event
{
    UIView *button = (UIView *)sender;
    UITouch *touch = [[event touchesForView:button] anyObject];
    CGPoint location = [touch locationInView:button];
    NSLog(@"Location in button: %f, %f", location.x, location.y);
}
于 2011-09-11T01:37:21.240 回答
6

对于 Swift 3.0:

@IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) 
{
       let myButton:UIButton = sender as! UIButton
       let touches: Set<UITouch>? = event.touches(for: myButton)
       let touch: UITouch? = touches?.first
       let touchPoint: CGPoint? = touch?.location(in: myButton)
       print("touchPoint\(touchPoint)")  
}
于 2017-03-27T09:30:19.180 回答