Hi,
ich habe mir eine CustomTransition geschrieben um ein Menu als ModalView einzublenden.
Dabei wird die aktuelle View verschoben und das Menü liegt hinter dieser. (Ähnlich wie eine Push Transition nur das die erste View nicht komplett verschwindet und noch etwas am Rand zu sehen bleibt).
Wenn ich nun wieder das Menü schließe (die Transistion die View wieder hineinbewegt. Flackert es kurz.
Die Ursache ist, dass die View, die ich beim öffnen des Menüs verschoben habe sich bei der Schließanimation initial wieder auf die Koordinaten 0,0 setzt. und somit für einen Bruchteil einer Sekunden da ist wo sie eigentlich erst hin animiert werden soll.
Weiß jemand wieso das so ist oder wie man das unterbinden kann?
Alles anzeigen
ich habe mir eine CustomTransition geschrieben um ein Menu als ModalView einzublenden.
Dabei wird die aktuelle View verschoben und das Menü liegt hinter dieser. (Ähnlich wie eine Push Transition nur das die erste View nicht komplett verschwindet und noch etwas am Rand zu sehen bleibt).
Wenn ich nun wieder das Menü schließe (die Transistion die View wieder hineinbewegt. Flackert es kurz.
Die Ursache ist, dass die View, die ich beim öffnen des Menüs verschoben habe sich bei der Schließanimation initial wieder auf die Koordinaten 0,0 setzt. und somit für einen Bruchteil einer Sekunden da ist wo sie eigentlich erst hin animiert werden soll.
Weiß jemand wieso das so ist oder wie man das unterbinden kann?
Quellcode
- import Foundation
- import UIKit
- class INTransitionAnimator:NSObject,UIViewControllerAnimatedTransitioning
- {
- var isAppearing:Bool = false
- func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval
- {
- return 1
- }
- // This method can only be a nop if the transition is interactive and not a percentDriven interactive transition.
- func animateTransition(transitionContext: UIViewControllerContextTransitioning)
- {
- var fromVC:UIViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
- var toVC:UIViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
- var container:UIView = transitionContext.containerView()
- var initialFrame : CGRect = transitionContext.initialFrameForViewController(fromVC)
- var offscreenRect : CGRect = initialFrame
- offscreenRect.origin.x += 260
- if(self.isAppearing)
- {
- toVC.view.frame = initialFrame
- container.addSubview(toVC.view)
- container.bringSubviewToFront(fromVC.view)
- UIView.animateWithDuration(1,
- animations:
- {
- fromVC.view.frame = offscreenRect
- },
- completion:
- {
- finished in
- fromVC.view.frame = offscreenRect
- transitionContext.completeTransition(true)
- }
- )
- }
- else
- {
- toVC.view.frame = offscreenRect
- UIView.animateWithDuration(1,
- animations:
- {
- toVC.view.frame = initialFrame
- },
- completion:
- {
- finished in
- fromVC.view.removeFromSuperview()
- transitionContext.completeTransition(true)
- }
- )
- }
- }
- }