2015-11-25 4 views
0

Я извиняюсь за то, чтобы быстро и попытаться реализовать сенсорное меню. До сих пор я подключил контроллеры представлений и прекрасно работал с этим кодом с этим кодом, и я не хочу, чтобы он нажал другой контроллер представления. Я хочу, чтобы он появился над ним. Код ниже подталкивает все. Как мне изменить его, чтобы появиться над контроллером представления вместо нажатия.Меню, которое скользит по контроллеру представления SWIFT

import UIKit 

@objc protocol MenuTransitionManagerDelegate { 
    func dismiss() 
} 

class MenuTransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate { 

    let duration = 0.5 
    var isPresenting = false 

    var snapshot:UIView? { 
     didSet { 
      if let delegate = delegate { 
       let tapGestureRecognizer = UITapGestureRecognizer(target: delegate, action: "dismiss") 
       snapshot?.addGestureRecognizer(tapGestureRecognizer) 
      } 
     } 
    } 

    var delegate:MenuTransitionManagerDelegate? 

    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { 
     return duration 
    } 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
     // Get reference to our fromView, toView and the container view 
     let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 
     let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 

     // Set up the transform we'll use in the animation 
     guard let container = transitionContext.containerView() else { 
      return 
     } 

     let moveDown = CGAffineTransformMakeTranslation(0, container.frame.height - 240) 
     let moveUp = CGAffineTransformMakeTranslation(0, -50) 

     // Add both views to the container view 
     if isPresenting { 
      toView.transform = moveUp 
      snapshot = fromView.snapshotViewAfterScreenUpdates(true) 
      container.addSubview(toView) 
      container.addSubview(snapshot!) 
     } 

     // Perform the animation 
     UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.8, options: [], animations: { 

      if self.isPresenting { 
       self.snapshot?.transform = moveDown 
       toView.transform = CGAffineTransformIdentity 
      } else { 
       self.snapshot?.transform = CGAffineTransformIdentity 
       fromView.transform = moveUp 
      } 

      }, completion: { finished in 

       transitionContext.completeTransition(true) 

       if !self.isPresenting { 
        self.snapshot?.removeFromSuperview() 
       } 
     }) 
    } 

    func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 

     isPresenting = true 
     return self 
    } 

    func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 

     isPresenting = false 
     return self 
    } 

} 

ответ

0

Попробуйте изменить эту строку.

let moveDown = CGAffineTransformMakeTranslation(0, container.frame.height - 240) 
let moveUp = CGAffineTransformMakeTranslation(0, -50) 

Эти линии в основном меняют контроллер рамки, который представляется/уволен. Если вы хотите, чтобы новый контроллер представления, например, появился над текущим контроллером, попробуйте изменить его альфа-свойства.

, если вы собираетесь изменить свою альфу, вот пример, чтобы получить основную идею.

UIView.animateWithDuration(1, animations: { 
    fromView.alpha = 0.3 
    toView.alpha = 1 
}) 
+0

Свойства альфы, что означает u? – Slygoth

+0

Свойства Alpha из UIView - это число с плавающей запятой, которое представляет его прозрачность. вы можете прочитать больше из [this] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/alpha). –

0

Я использую другой подход. В раскадровке/документе, убедитесь, что ваше меню «Вид» следует за вашим обычным видом, чтобы оно было сверху.

Добавить ограничения для представления меню.

Далее, установите в инспекторе размеров, установите ограничения, чтобы меню находилось над видом (т. Е. Из видимого окна).

Cntl-Drag от верхнего и нижнего ограничений к VC для создания точек для них.

Затем анимировать изменение ограничения значения верхнего ограничения на 0, а нижнее ограничение на:

frame.size.height - menuheight 

(код или рассчитать в зависимости от обстоятельств)

Скрытия его, изменить верхнее ограничение на:

menuHeight * -1 

и нижнее ограничение на:

frame.size.height 

Левые и правые ограничения могут, очевидно, оставаться на месте.

Рассмотрите: если у вас есть строка состояния или панель навигации, вам может потребоваться указать дополнительные 20; 44 к уравнению, то есть меню, показывающее верхнее ограничение, будет тогда равным 64 и т. Д.

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

  • Нет связанных вопросов^_^