UIStoryboardSegue:动画期间不显示视图
Posted
技术标签:
【中文标题】UIStoryboardSegue:动画期间不显示视图【英文标题】:UIStoryboardSegue: view is not displayed during animation 【发布时间】:2015-06-08 17:04:34 【问题描述】:当我的自定义转场动画正在执行时,目标视图显示为黑色。动画结束后,视图出现并且看起来不错。
以下是截图:
动画场景:
segue/动画完成后查看:
这是自定义的 segue 类:
class SegueToPreview: UIStoryboardSegue
override func perform()
// Assign the source and destination views to local variables.
var firstVCView = self.sourceViewController.view as UIView!
var secondVCView = self.destinationViewController.view as UIView!
// Get the screen width and height.
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
// Specify the initial position of the destination view.
secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)
// Access the app's key window and insert the destination view above the current (source) one.
let window = UIApplication.sharedApplication().keyWindow
window?.insertSubview(secondVCView, aboveSubview: firstVCView)
// Animate the transition.
UIView.animateWithDuration(0.2, animations: () -> Void in
firstVCView.frame = CGRectOffset(firstVCView.frame, -screenWidth, 0.0)
secondVCView.frame = CGRectOffset(secondVCView.frame, -screenWidth, 0.0)
) (Finished) -> Void in
self.sourceViewController.presentViewController(self.destinationViewController as! UIViewController,
animated: false,
completion: nil)
虽然 unwind segue 工作得很好,但同时显示两个视图。
我认为在执行动画时视图未加载,但不知道如何解决。
【问题讨论】:
也许您在 viewDidAppear 中放错了 UI 代码?从技术上讲,它已经加载了,因为您调用了 self.destinationViewController.view 另外,我认为你应该在它的viewDidLoad中初始化secondViewController的frame。 【参考方案1】:目标 vc 视图的初始位置设置不正确(假设您希望视图从右侧移入);您将其放置在屏幕下方,而不是屏幕右侧,
secondVCView.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight)
应该是这样的,
secondVCView.frame = CGRectMake(screenWidth, 0, screenWidth, screenHeight)
【讨论】:
以上是关于UIStoryboardSegue:动画期间不显示视图的主要内容,如果未能解决你的问题,请参考以下文章
在使用 hidesBottomBarWhenPushed 进行推送动画期间工具栏定位不正确