如何通过捏合手势(或其他连续手势)执行动作转换?

3

如果这很显然,而我又错过了什么,请原谅..

我有一个包含UIImageView的视图控制器。 当有人向外捏合时,我想要跳转到另一个视图,即他们之前查看的所有图像的索引(这称为反向segue吗?)。

对于离散手势(轻拍,滑动..),我可以进入Storyboard,在手势上拖动,然后控制-拖动以创建segue。

对于连续手势,我怎么做?是否需要编程实现?

2个回答

2
当使用手势识别器时,您可以为其指定目标。就像在这个PinchGestureRecognizer中一样:
let pinch = UIPinchGestureRecognizer(target: self, action: "handlePinch:")

handlePinch() {} 函数中,您可以像这样执行segue:(在storyboard中创建segue后)

performSegueWithIdentifier("mySegueID", sender: nil)

希望这能帮到您 :)

1
谢谢!我创建了一个动作,就像我为轻拍创建segue一样,创建了一个命名的segue,并在动作中使用“performSegueWithIdentifier”。看起来它被调用了很多次 - 所以在那里放置了一个条件,只有在最后执行segue(sender.state == UIGestureRecognizerState.Ended)。 - Kevin Davis
很高兴能够帮到您 :) - LinusGeffarth

2

1. 反向 Segues

针对您的第一个问题,是的,您可以使用反向 segue。反向 segue 是普通 segue 的一种,它用于通过 push、modal 或 popover segue 返回。甚至可以一次通过多个 push、modal 或 popover 返回。

这里有一个很好的教程: http://spin.atomicobject.com/2014/10/25/ios-unwind-segues/

2. UIPinchGestureRecogniser

您可以使用您的 UIPinchGestureRecognizer 上的 scale 属性来确定何时执行您的反向 segue。例如:

class MyViewController: UIViewController {
    //  We need to keep track of whether we asked to perform the segue,
    //  otherwise the segue could be called multiple times because 
    //  UIPinchGestureRecognizer can be called more than once.
    var isPerformingSegue = false

    override func viewDidLoad() {
        super.viewDidLoad()

        let pinchRecogniser = UIPinchGestureRecognizer(target: self, action: Selector("pinched:"))
        self.view.addGestureRecognizer(pinchRecogniser)
    }

    override func viewDidAppear(animated: Bool) {
        isPerformingSegue = false
    }

    func pinched(recogniser: UIPinchGestureRecognizer) {
        if recogniser.scale <= 0.2 && !isPerformingSegue {
            self.performSegueWithIdentifier("unwindSegue", sender: self)
            isPerformingSegue = true
        }
    }
}

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