检测sender动作方法中UIButton内的点击/触摸位置。

3

我有一个UIButton,它的大小与视图相同(覆盖整个视图/屏幕)。

我已经设置了一个Touchdown操作,我需要在此操作中找出按钮上点击/按下的位置(获取x和y坐标)。

这可能吗?

2个回答

3
创建带有senderevent参数的操作函数,然后您就可以获取按钮上的触摸位置。
@IBAction func buttonAction(sender: AnyObject, event: UIEvent) {
    // downcast sender as a UIView
    let buttonView = sender as UIView;

    // get any touch on the buttonView
    if let touch = event.touchesForView(buttonView)?.anyObject() as? UITouch {
        // print the touch location on the button
        println(touch.locationInView(buttonView))
    }
}

我尝试了,但是出现了以下错误:终止应用程序,原因是未捕获的异常 'NSInvalidArgumentException',原因是“-[beater.ViewController userbeat:]:向实例0x15853200发送了无法识别的选择器”。 - Roi Mulia
你的代码中有些地方尝试调用 beater 类中名为 userbeat 的函数,但是该函数并不存在或者 beater 对象已被释放。 - Ron Fessler
@IBAction func userbeat(sender: AnyObject , event: UIEvent) { let buttonView = sender as UIView;// 获取按钮视图上的任何触摸 if let touch = event.touchesForView(buttonView)?.anyObject() as? UITouch { // 在按钮上打印触摸位置 println("这是什么\(touch.locationInView(buttonView))") }} - Roi Mulia
哦,哈哈,粘贴得不太好,不知道可能出了什么问题,因为它们都存在... - Roi Mulia
我应该创建另一个函数或从按钮创建另一个连接吗? - Roi Mulia
显示剩余4条评论

0

被接受的答案的Swift 3版本:

@IBAction func increaseButtonTapped(sender: UIButton, event: UIEvent) {

    // get any touch on the buttonView

    let events = event.touches(for: sender)

    for event in events! {

        let location = event.location(in: sender)

        print("\(location)")

    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接