web-dev-qa-db-ja.com

UIButton TouchUpInside Touch Location

大きな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

オンラインで調べたところ、これに似たものは見つかりませんでした。よろしくお願いします。

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

このコードがおそらくViewControllerのアクション内にあることを除けば、それは正しい考えですよね?その場合、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);
}
58
Caleb

For 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)")  
}
5
Ammar Mujeeb