两个视图之间的 Swift CATransition - 滑过效果上一个屏幕变白

Posted

技术标签:

【中文标题】两个视图之间的 Swift CATransition - 滑过效果上一个屏幕变白【英文标题】:Swift CATransition Between Two Views - Slide over effect previous screen turns white 【发布时间】:2015-07-16 19:30:13 【问题描述】:

我正在尝试使用 CATransition 在两个全屏视图(相同的视图控制器)之间快速制作动画。希望复制(或接近)导航视图控制器推送转换。遇到 view2(要呈现的新视图)正确滑过,但 view1(下面的视图)消失的问题。基本上,正在动画的视图在白色屏幕上滑动,但我希望它在前一个屏幕上滑动。

var pushAnimationEffect = CATransition()

override func viewDidLoad() 
    super.viewDidLoad()
    pageToUIView[i] = UIView()
    view1.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height)
    view1.center = CGPointMake(screenSize.width/2, screenSize.height/2)
    view2.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height)
    view2.center = CGPointMake(screenSize.width/2, screenSize.height/2)
    view1.layer.addAnimation(pushAnimationEffect, forKey: nil)
    view2.layer.addAnimation(pushAnimationEffect, forKey: nil)
    self.view.addSubview(view1)


    pushAnimationEffect.delegate = self
    pushAnimationEffect.duration = 0.4
    pushAnimationEffect.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)


func nextPage() 
    pushAnimationEffect.type = kCATransitionMoveIn
    pushAnimationEffect.subtype = kCATransitionFromRight
    self.view.addSubview(view2)
    view1.removeFromSuperview()


func prevPage() 
    pushAnimationEffect.type = kCATransitionMoveIn
    pushAnimationEffect.subtype = kCATransitionFromLeft
    self.view.addSubview(view1)
    view2.removeFromSuperview()

稍微简化了代码,使其更易于阅读。

有没有更好的方法来做到这一点?代码有问题吗?

【问题讨论】:

【参考方案1】:

您需要在动画完成后移除视图。使用 animationDidStop:finished: 委托方法。

【讨论】:

以上是关于两个视图之间的 Swift CATransition - 滑过效果上一个屏幕变白的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在视图之间传递多个值

创建一个 segue 并通过 Swift 在两个视图控制器之间附加它?

如何在swift ios中的两个自定义表格视图单元格之间添加间距?

Swift:如何将单元格视图设计为两个三角形?

如何在 Swift 中的视图之间传递数据

如何在 Swift 的 UIScrollView 中的视图之间添加填充? [关闭]