ios - Initial orientation when using UIViewController contaiment -


in 1 of projects i'm using uiviewcontroller containment display popups. here code i'm using embedding viewcontrollers:

struct viewcontrollerpresentercontainment : viewcontrollerpresenter {     let containerviewcontroller : uiviewcontroller     let containerview: uiview      init(containerviewcontroller: uiviewcontroller, containerview: uiview) {         self.containerviewcontroller = containerviewcontroller         self.containerview = containerview     }      func showviewcontroller(viewcontroller: uiviewcontroller, animated: bool, transitioncontroller: transitioncontroller?, completion: viewcontrollerpresentercompletionblock?) {         self.showviewcontroller(viewcontroller: viewcontroller, animated: animated, transitioncontroller: transitioncontroller, replacingviewcontroller: nil, completion: completion)     }      func showviewcontroller(viewcontroller: uiviewcontroller, animated: bool, transitioncontroller: transitioncontroller?, replacingviewcontroller: uiviewcontroller?, completion: viewcontrollerpresentercompletionblock?) {         replacingviewcontroller?.willmove(toparentviewcontroller: nil)         self.containerviewcontroller.addchildviewcontroller(viewcontroller)          if animated, let transitioncontroller = transitioncontroller?.animatorcontrollerfortransition(.show) {             let context = transitioncontext(fromviewcontroller: replacingviewcontroller, toviewcontroller: viewcontroller, containerview: self.containerview) { (completed) in                 replacingviewcontroller?.view.removefromsuperview()                 replacingviewcontroller?.removefromparentviewcontroller()                 viewcontroller.didmove(toparentviewcontroller: self.containerviewcontroller)                  transitioncontroller.animationended?(completed)                  completion?(completed)             }             transitioncontroller.animatetransition(using: context)         } else {             self.containerview.addsubviewatfullsize(viewcontroller.view)              replacingviewcontroller?.view.removefromsuperview()             replacingviewcontroller?.removefromparentviewcontroller()             viewcontroller.didmove(toparentviewcontroller: self.containerviewcontroller)              completion?(true)         }     }      func hideviewcontroller(viewcontroller: uiviewcontroller, animated: bool, transitioncontroller: transitioncontroller?, completion: viewcontrollerpresentercompletionblock?) {         viewcontroller.willmove(toparentviewcontroller: nil)         if animated, let transitioncontroller = transitioncontroller?.animatorcontrollerfortransition(.hide) {             let context = transitioncontext(fromviewcontroller: viewcontroller, toviewcontroller: nil, containerview: self.containerview) { (completed) in                 viewcontroller.view.removefromsuperview()                 viewcontroller.removefromparentviewcontroller()                  completion?(completed)             }             transitioncontroller.animatetransition(using: context)         } else {             viewcontroller.view.removefromsuperview()             viewcontroller.removefromparentviewcontroller()             completion?(true)         }     } } 

i'm using uiviewcontrolleranimatedtransitioning:

class transitioncontrollerfade : transitioncontroller {     private var duration: timeinterval      init(duration: timeinterval = 0.3) {         self.duration = duration     }      func animatorcontrollerfortransition(_ transitiontype: transitiontype) -> uiviewcontrolleranimatedtransitioning {         switch transitiontype {         case .show:             return transitioncontrollerfadein(duration: self.duration)         case .hide:             return transitioncontrollerfadeout(duration: self.duration)         }     } }  class transitioncontrollerfadein : nsobject, uiviewcontrolleranimatedtransitioning {     private var duration: timeinterval      init(duration: timeinterval = 0.3) {         self.duration = duration         super.init()     }      func transitionduration(using transitioncontext: uiviewcontrollercontexttransitioning?) -> timeinterval {         return self.duration     }      func animatetransition(using transitioncontext: uiviewcontrollercontexttransitioning) {         if let viewcontroller = transitioncontext.viewcontroller(forkey: .to) {             transitioncontext.containerview.addsubviewatfullsize(viewcontroller.view)              viewcontroller.view.alpha = 0             uiview.animate(withduration: transitionduration(using: transitioncontext), delay: 0, options: [.curveeaseout], animations: {                 viewcontroller.view.alpha = 1             }, completion: { finished in                 transitioncontext.completetransition(!transitioncontext.transitionwascancelled)             })         }     } }  class transitioncontrollerfadeout : nsobject, uiviewcontrolleranimatedtransitioning {     private var duration: timeinterval      init(duration: timeinterval = 0.3) {         self.duration = duration         super.init()     }      func transitionduration(using transitioncontext: uiviewcontrollercontexttransitioning?) -> timeinterval {         return self.duration     }      func animatetransition(using transitioncontext: uiviewcontrollercontexttransitioning) {         if let fromviewcontroller = transitioncontext.viewcontroller(forkey: .from) {             if let toviewcontroller = transitioncontext.viewcontroller(forkey: .to) {                 transitioncontext.containerview.insertsubviewatfullsize(toviewcontroller.view, belowsubview: fromviewcontroller.view)             }              uiview.animate(withduration: transitionduration(using: transitioncontext), delay: 0, options: [.curveeaseout], animations: {                 fromviewcontroller.view.alpha = 0             }, completion: { finished in                 transitioncontext.completetransition(!transitioncontext.transitionwascancelled)             })         }     } } 

my current problem need block rotation 1 of uiviewcontrollers. on uiviewcontroller class have:

-(uiinterfaceorientationmask) supportedinterfaceorientations {     return uiinterfaceorientationmaskportrait | uiinterfaceorientationmaskportraitupsidedown; }  -(bool)shouldautorotate {     return yes; }  - (uiinterfaceorientation) preferredinterfaceorientationforpresentation {     return uiinterfaceorientationportrait | uiinterfaceorientationmaskportraitupsidedown; } 

everything seems work fine (rotations supported , forwarded contained view controllers) - initial rotation broken.

when add viewcontroller (loaded xib) , add screen - despite portrait requirement - seems getting landscape size , it's getting fixed after rotate device first time portrait - it's keeping portrait-only mode.

what missing in whole process ?

i tried make viewcontroller rootviewcontroller uiwindow - problem same.

is there way enforce portrait mode viewcontroller way i'm doing ?


Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -