在Swift中滑动Segue

克里斯

我正在尝试创建一个水平滑动的segue,它将从一个视图平移到另一个视图。我进行了平移,但是在要显示下一个视图控制器的区域中显示了一个黑色空间。这就是我实施我的学习的方式

class SlideSegue: UIStoryboardSegue {

    enum Direction {
        case Left
        case Right
    }

    // MARK: - Properties
    var direction = Direction.Left

    // MARK: -
    override func perform() {
        let srcVc = self.sourceViewController
        let destVc = self.destinationViewController


        let destView = destVc.view.snapshotViewAfterScreenUpdates(true)
        var frame = destView.frame
        frame.origin.x = CGFloat(valForDirection()) * srcVc.view.frame.width
        destView.frame = frame
        srcVc.view.addSubview(destView)

        UIView.animateWithDuration(0.3, animations: { () -> Void in
            let x = CGFloat(self.valForDirection()) * srcVc.view.bounds.width
            let slide = CGAffineTransformMakeTranslation(x, 0)
            srcVc.view.transform = slide
            }) { (finished: Bool) -> Void in
                srcVc.presentViewController(destVc, animated: false, completion: nil)

                destView.removeFromSuperview()
        }

    }

    func valForDirection() -> Int {
        return direction == Direction.Left ? -1 : 1
    }

}

class SlideLeftSegue: SlideSegue {
    override func perform() {
        self.direction = Direction.Left
        super.perform()
    }
}

class SlideRightSegue: SlideSegue {
    override func perform() {
        self.direction = Direction.Right
        super.perform()
    }
}

编辑

编辑(已解决)这是最终的工作解决方案,这要感谢以下两个答案

class SlideSegue: UIStoryboardSegue {

    enum Direction: Int {
        case Left = 1
        case Right = -1
    }

    // MARK: - Properties
    var direction = Direction.Left

    // MARK: -
    override func perform() {
        let srcVc = self.sourceViewController
        let destVc = self.destinationViewController


        let destView = destVc.view.snapshotViewAfterScreenUpdates(true)
        var frame = destView.frame
        frame.origin.x = CGFloat(direction.rawValue) * srcVc.view.frame.width
        destView.frame = frame
        srcVc.view.addSubview(destView)

        UIView.animateWithDuration(0.3, animations: { () -> Void in
            let x = -CGFloat(self.direction.rawValue) * srcVc.view.bounds.width
            let slide = CGAffineTransformMakeTranslation(x, 0)
            srcVc.view.transform = slide
            }) { (finished: Bool) -> Void in
                srcVc.presentViewController(destVc, animated: false, completion: nil)

                destView.removeFromSuperview()
        }

    }

}

class SlideLeftSegue: SlideSegue {
    override func perform() {
        self.direction = Direction.Left
        super.perform()
    }
}

class SlideRightSegue: SlideSegue {
    override func perform() {
        self.direction = Direction.Right
        super.perform()
    }
}
路L

我测试了以下修改,并且效果很好。

func valForDirection() -> Int {
    return direction == Direction.Left ? 1 : -1
}

如果向左滑动,destView的originX应该是它的宽度。else-宽度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift中的条件Segue

来自分类Dev

在Swift中从底部滑动视图?

来自分类Dev

从Swift中的UICollectionView进行Segue

来自分类Dev

在Swift中更改滑动删除背景的颜色

来自分类Dev

在Swift中向上滑动动画

来自分类Dev

Swift中的滑动导航类似于Facebook

来自分类Dev

Swift:iOS 9中的UIPageControl自动滑动

来自分类Dev

Swift中的自定义Segue

来自分类Dev

无法在代码中调用segue(Swift)

来自分类Dev

在Swift中为Segue做准备

来自分类Dev

在Swift中以编程方式制作Segue

来自分类Dev

Swift中的自定义Segue

来自分类Dev

如何使用 Swift 在 segue 中获取数据

来自分类Dev

如何在Swift / iOS中创建侧向滑动图库?

来自分类Dev

如何在iOS Swift中捕获页面滑动事件

来自分类Dev

如何在Swift中以编程方式隐藏在滑动上

来自分类Dev

在Swift和Sprite Kit中,如何检测滑动的Sprite?

来自分类Dev

Segue使UITabBarController在Swift中向上移动状态栏?

来自分类Dev

如何在'didSelectRowAtIndexPath'中访问segue-Swift / IOS

来自分类Dev

使用Sender为Swift中的Segue做准备

来自分类Dev

等效于“-(IBAction)unwindToList:(UIStoryboardSegue *)segue;” 在Apple Swift中?

来自分类Dev

从TableView Segue到Swift中的导航控制器

来自分类Dev

禁用UIPageViewController滑动-Swift

来自分类Dev

Swift-执行Segue

来自分类Dev

取消segue无效SWIFT

来自分类Dev

Swift Segue致命错误

来自分类Dev

Swift segue 过渡阴影

来自分类Dev

如何使用向右滑动手势执行segue

来自分类Dev

Swift:UIPanGestureRecognizer 错误滑动反向