将手指滑过 3 个按钮 - Xcode & Swift



我的UI中有3个按钮,最终将执行类似于钢琴上的键。这3个按钮中的任何一个都可能被点击以执行特定的按钮操作,但用户可以将手指"滑动"到下一个按钮上以执行按钮2的操作。

我做了一些搜索,它看起来像一个touchesBegan方法检测水龙头的位置是最好的。我的尝试如下:

@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var button3: UIButton!

(我没有任何动作事件绑定到3个按钮,因为我认为touchesBegan会覆盖它们)

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    var touch: UITouch = event!.allTouches()!.first!
    var location: CGPoint = touch.locationInView(touch.view!)
    if CGRectContainsPoint(button1.frame, location){
        print("button 1")
    }
    else if CGRectContainsPoint(button2.frame, location) {
        print("button 2")
    }
    else if CGRectContainsPoint(button3.frame, location) {
        print("button 3")
    }
}
当我测试这个时,没有打印到控制台。我测试了点击和滑动按钮。我应该使用uiview而不是uibutton吗?我应该在按钮上使用动作吗?这是针对Swift 2.0的。谢谢你。

编辑

我有一个更接近我设想的工作原型。这个线程:使用iOS平移手势在网格中突出显示按钮,这给我指明了在按钮父视图上使用平移手势的方向。

var touchPoint = CGPoint()
var myGesture = UIPanGestureRecognizer()

viewDidLoad:

    myGesture = UIPanGestureRecognizer(target: self, action: Selector("panDetected:"))
    myGesture.maximumNumberOfTouches = 1
    view.addGestureRecognizer(myGesture)

.

func panDetected(sender : UIPanGestureRecognizer) {
    touchPoint = sender.locationInView(self.view)

        if CGRectContainsPoint(button1.frame, touchPoint) {
            button1Func()
        }
        else if CGRectContainsPoint(button2.frame, touchPoint) {
            button2Func()
        }
        else if CGRectContainsPoint(button3.frame, touchPoint) {
            button3Func()
        }

上面的确实工作,然而,button1Func/button2Func/button3Func都包含一个动画块。当手指在按钮中拖动时,每次检测到移动时都会触发该方法。我只想让这事发生一次。我试着将它添加到state == . began语句中,但是一旦手指离开第一个点击按钮,就会阻止任何功能。

是否有任何方法我可以触发这些方法(button1Func/button2Func/button3Func)只是一次内平移手势一旦手指是在3个按钮的边界内?如果你感到困惑,我很乐意澄清。谢谢。

有一大堆的控制事件你可以绑定到IBActions。看看UIControlEvents枚举。您可能想要为UIControlEventTouchDragInside, UIControlEventTouchDragEnter和其他一些添加动作。

最新更新