我想在Swift中实现左右滑动功能。

3

我有一个在Xcode 7中的项目(Swift),想要使用向右和向左滑动功能来加载在Storyboard中设计的不同ViewController,以便前往下一个或返回上一个ViewController。 目前我只实现了从右到左的淡入效果,我希望能够实现两个ViewController之间的淡入效果。

func respondToSwipeGesture(sender: UISwipeGestureRecognizer) {

    switch sender.direction {
    case UISwipeGestureRecognizerDirection.Right:
        print("SWIPED DERECHA")
       self.performSegueWithIdentifier("cambio2", sender: nil)
    case UISwipeGestureRecognizerDirection.Left:
        print("SWIPED IZQUIERDA")
        self.performSegueWithIdentifier("cambio", sender: nil)
    default:
        break
    }
}
3个回答

8
您可以通过创建两个UISwipeGestureRecognizer的实例来使用它,一个用于每个方向。
    var swipeLeft : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "swipe:")
    swipeLeft.direction = UISwipeGestureRecognizerDirection.Left

    var swipeRight : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "swipe:")
    swipeRight.direction = UISwipeGestureRecognizerDirection.Right

    self.view.addGestureRecognizer(swipeLeft)
    self.view.addGestureRecognizer(swipeRight)

而且还有滑动功能
func swipe(sender: UISwipeGestureRecognizer) {

    switch sender.direction {
    case UISwipeGestureRecognizerDirection.Right:
        print("SWIPED DERECHA")
        self.performSegueWithIdentifier("first", sender: nil)
    case UISwipeGestureRecognizerDirection.Left:
        print("SWIPED IZQUIERDA")
        self.performSegueWithIdentifier("second", sender: nil)
    default:
        break
    }
}

谢谢你们在学校之后的回答,我会尝试创建一个效果,当我向左或向右滑动时,会出现淡入淡出的效果。我认为这必须通过导航控制器和动画来实现。 - adrianmanuel
对于Swift3:在注册和swipe()函数中将"UISwipeGestureRecognizerDirection.Left"更改为"UISwipeGestureRecognizerDirection.left",并将"swipeRight.direction = UISwipeGestureRecognizerDirection.Right"更改为"swipeRight.direction = UISwipeGestureRecognizerDirection.right"。还要将"self.performSegueWithIdentifier("first", sender: nil)"更改为"self.performSegue(withIdentifier: "first", sender: nil)",将"self.performSegueWithIdentifier("second", sender: nil)"更改为"self.performSegue(withIdentifier: "second", sender: nil)"。 - Andreas Kraft

2

你的做法是错误的。你需要研究交互式自定义转场。例如,如果你想左右滑动来表示导航控制器中的推入和弹出,则需要实现导航控制器代理的navigationController:animationControllerForOperation:fromViewController:toViewController:navigationController:interactionControllerForAnimationController:方法,然后从这里开始。


0

UISwipeGestureRecognizer 只允许一个方向,您应该使用 UIPanGestureRecognizer

let swipe = UIPanGestureRecognizer(target: self, action: "respondToSwipeGesture:")
        self.view.addGestureRecognizer(swipe);


func respondToSwipeGesture(sender: UIPanGestureRecognizer) {
        let point = sender.velocityInView(self.view)
        //left or right
        if point.x > 0 {
            self.performSegueWithIdentifier("segue1", sender: nil)
        }else{
            self.performSegueWithIdentifier("segue2", sender: nil)
        }

当然,两个控制器都应该在UINavigationController中。

对于Storyboard设置: 输入图像描述


我在使用UIGestureRecognizer时成功了,但是视图控制器之间的转换只能单向工作。我想在应用程序中创建一个典型的杂志,就像iBooks中PDF的视图一样。 - adrianmanuel

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