1

У меня есть MainViewController, у которого есть представление стека и его ширина превышает ширину экрана. На левой стороне находится выпадающее меню storyboard. И на экране есть кнопка меню, которая активирует анимацию для изменений UIStackView от -260 до 0. Но когда я нажимаю какую-либо кнопку в слайд-меню, prepareForSegue() переопределяет анимацию и изменения контента немедленно. Как это исправить?Как исправить `prepareForSegue()` override `UIViewAnimation`

Вы можете найти gif ниже.

Вот коды:

class MainViewController: UIViewController 
{ 
    var container: ContainerViewController? 
    @IBOutlet weak var superView: UIStackView! 

    @IBAction func menuButtonsChangeContent(sender: AnyObject) { 
     switch(sender.tag){ 
     case 1: 
      container?.changeContent("first") 
     case 2: 
      container?.changeContent("second") 
     case 3: 
      container?.changeContent("third") 
     default: 
      break 
     } 
    } 


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Container"{ 
      self.slideOutMenu("") 
      container = segue.destinationViewController as? ContainerViewController 
     } 
    } 

    @IBAction func slideOutMenu(sender: AnyObject) { 

     if self.superView.frame.origin.x != -260 { 

      UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.5, options: .CurveEaseInOut, animations: ({ 

       self.superView.frame = CGRect(x: -260, y: 20, width: self.superView.frame.width, height: self.superView.frame.height) 

      }), completion: nil) 
     }else{ 
      UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.5, options: .CurveEaseInOut, animations: ({ 
       self.superView.frame = CGRect(x: 0, y: 20, width: self.superView.frame.width, height: self.superView.frame.height) 

      }), completion: nil) 
     } 
    } 
} 

//ContainerViewController.swift  
class ContainerViewController: UIViewController 
{ 
    var sourceVC: UIViewController? 
    var destinationVC: UIViewController? 
    var segueIdentifier: String? 
    var counter = 0 

    func changeContent(segueIdentifier: String) 
    { 
     self.performSegueWithIdentifier(segueIdentifier, sender: self) 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0.5, options: .CurveEaseInOut, animations: ({ 

      if self.sourceVC != nil { 
       self.sourceVC?.view.removeFromSuperview() 
       print("deleted") 
      } 

      self.destinationVC = segue.destinationViewController 
      self.addChildViewController(self.destinationVC!) 
      self.destinationVC?.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
      self.view.addSubview((self.destinationVC?.view)!) 
      self.destinationVC?.didMoveToParentViewController(self) 
      self.sourceVC = self.destinationVC 
     }), completion: nil) 
    } 
} 

И Раскадровка:

enter image description here

GIF:

enter image description here

ответ

0

Я использовал UIStackView как супер просмотр в MainViewController, но проблема с тенями подошла, и я изменил UIStackView на UIView. Возможно, это странно, но проблема ушла.

enter image description here

Смежные вопросы