我的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指示我在按钮 super 视图上使用手势的方向。
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)?如果这令人困惑,我将很高兴澄清这一点。谢谢。

最佳答案

您可以将许多控制事件绑定到IBAction。看看UIControlEvents枚举。您可能想为UIControlEventTouchDragInsideUIControlEventTouchDragEnter和其他一些添加操作。

关于ios - 在3个按钮上滑动手指-Xcode和Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38064963/

10-09 08:52
查看更多