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

时间:2016-06-27 23:51:09

标签: ios uiview swift2 slide

我的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")
    }

}

我测试时没有打印到控制台。我测试了按钮上的点击和滑动。我应该使用UIViews代替UIButtons吗?我应该在按钮上使用操作吗?这适用于Swift 2.0。谢谢。

修改

我的工作原型更接近我设想的功能。这个帖子在这里:Using iOS pan gesture to highlight buttons in grid向我指出了在按钮superview上使用pangesture的方向。

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()
        }

上面的DOES工作,但是,button1Func / button2Func / button3Func都包含一个动画块。当手指在按钮内拖动时,每次检测到移动时都会触发该方法。我只需要这一次发生。我尝试将其添加到状态== .Began语句中,但是一旦手指离开第一个点击按钮,就会阻止任何功能。

当手指在3个按钮的每个边界内时,有没有办法可以在平移手势内触发这些方法(button1Func / button2Func / button3Func)?如果它令人困惑,我将很乐意澄清这一点。感谢。

1 个答案:

答案 0 :(得分:1)

您可以将一大堆控制事件与IBActions联系起来。看看UIControlEvents枚举。您可能希望为UIControlEventTouchDragInsideUIControlEventTouchDragEnter和其他一些操作添加操作。