大きな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
?
オンラインで調べたところ、これに似たものは見つかりませんでした。よろしくお願いします。
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);
}
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)")
}