【问题标题】:UIStoryboardSegue: top view is not sliding downUIStoryboardSegue:顶视图没有向下滑动
【发布时间】:2015-08-04 08:20:59
【问题描述】:

我有以下 swift 代码,我想要实现的是从顶部滑落的 segue。我希望 secondVCView 位于 firstVCView 下方,并且希望 firstVCView 滑出显示 secondVCView。

目前没有动画,只是闪烁到第二个VCView。

非常感谢

import UIKit

class TopToBottomSegue: 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, screenWidth, screenHeight)

    // Access the app's key window and insert the destination view below the current (source) one.
    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(secondVCView, belowSubview: firstVCView)

    // Animate the transition.
    UIView.animateWithDuration(0.4, animations: { () -> Void in

        firstVCView.frame = CGRectOffset(firstVCView.frame, 0.0, screenHeight)
        //secondVCView.frame = CGRectOffset(secondVCView.frame, -screenWidth, 0.0)

        }) { (Finished) -> Void in
            self.sourceViewController.presentViewController(self.destinationViewController as! UIViewController,
                animated: false,
                completion: nil)
    }

  }
}

【问题讨论】:

    标签: ios iphone swift uistoryboardsegue


    【解决方案1】:

    据我所知,您需要在 animateWithduration 块中调用 layoutIfNeed 才能获得流畅的动画。

    问候

    【讨论】:

      【解决方案2】:

      我不确定这是否是正确的方法,但我设法通过插入两个视图使其工作。

      L

      --

      import UIKit
      
      class TopToBottomSegue: UIStoryboardSegue {
      
      override func perform() {
          // Assign the source and destination views to local variables.
          let firstVCView = self.sourceViewController.view as UIView!
          let secondVCView = self.destinationViewController.view as UIView!
      
          // Get the screen width, height and status bar height.
          let screenWidth = UIScreen.mainScreen().bounds.size.width
          let screenHeight = UIScreen.mainScreen().bounds.size.height
          let statusBarHeight = self.statusBarHeight()
      
          // Specify the initial position of both views.
          secondVCView.frame = CGRectMake(0.0, 0.0, screenWidth, screenHeight)
          firstVCView.frame = CGRectMake(0.0, statusBarHeight, screenWidth, screenHeight)
      
          // Access the app's key window and insert the destination view below the current (source) one.
          let window = UIApplication.sharedApplication().keyWindow
          window?.insertSubview(firstVCView, aboveSubview: secondVCView)
          window?.insertSubview(secondVCView, belowSubview: firstVCView)
      
          // Animate the transition.
          UIView.animateWithDuration(0.3, animations: { () -> Void in
      
              firstVCView.frame = CGRectOffset(firstVCView.frame, 0.0, screenHeight)
      
              }) { (Finished) -> Void in
                  self.sourceViewController.presentViewController(self.destinationViewController as UIViewController,
                      animated: false,
                      completion: nil)
          }
      
      }
      func statusBarHeight() -> CGFloat {
          let statusBarSize = UIApplication.sharedApplication().statusBarFrame.size
          return Swift.min(statusBarSize.width, statusBarSize.height)
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 2011-04-11
        • 2012-05-06
        • 2012-10-14
        • 2019-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多