自定义ViewController转换不能正确resize
我有我的应用程序中的导航控制器的自定义Viewcontroller转换。 在执行转换时,它没有正确调整子视图控制器的内容。 默认的转换不会调整它的大小。 我在Github上添加了一个示例项目来演示这个问题。
embedded在导航控制器中的VC
import UIKit class PopoverVCViewController: UIViewController, UIViewControllerTransitioningDelegate, UINavigationControllerDelegate { let animator = Animator() override func viewDidLoad() { super.viewDidLoad() navigationController?.delegate = self // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { animator.reverse = operation == .Pop return animator } }
animation师
class Animator: NSObject, UIViewControllerAnimatedTransitioning { var reverse: Bool = false func animateTransition(transitionContext: UIViewControllerContextTransitioning) { // get reference to our fromView, toView and the container view that we should perform the transition in let container = transitionContext.containerView()! let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! // set up from 2D transforms that we'll use in the animation let offScreenRight = CGAffineTransformMakeTranslation(container.frame.width, 0) let offScreenLeft = CGAffineTransformMakeTranslation(-container.frame.width, 0) // start the toView to the right of the screen if (self.reverse == false) { toView.transform = offScreenRight } else { toView.transform = offScreenLeft } // add the both views to our view controller container.addSubview(toView) container.addSubview(fromView) // get the duration of the animation // DON'T just type '0.5s' -- the reason why won't make sense until the next post // but for now it's important to just follow this approach let duration = self.transitionDuration(transitionContext) // perform the animation! // for this example, just slid both fromView and toView to the left at the same time // meaning fromView is pushed off the screen and toView slides into view // we also use the block animation usingSpringWithDamping for a little bounce UIView.animateWithDuration(duration, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { if (self.reverse == false) { fromView.transform = offScreenLeft } else { fromView.transform = offScreenRight } toView.transform = CGAffineTransformIdentity }, completion: { finished in // tell our transitionContext object that we've finished animating transitionContext.completeTransition(true) }) } // return how many seconds the transiton animation will take func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { return 0.3 } // MARK: UIViewControllerTransitioningDelegate protocol methods // return the animataor when presenting a viewcontroller // remmeber that an animator (or animation controller) is any object that aheres to the UIViewControllerAnimatedTransitioning protocol func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { return self } // return the animator used when dismissing from a viewcontroller func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { return self } }
您可以设置toView
的框架以匹配toView
的高度和宽度:
let container = transitionContext.containerView()! let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! toView.frame = CGRectMake(toView.frame.origin.x, toView.frame.origin.y, fromView.frame.width, fromView.frame.height)
或者像这样:
UIViewController* toController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIViewController* fromController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
然后在你的animation程序结束时设置它:
toController.view.frame=fromController.view.frame;
- 我应该在每个UIViewController中侦听可达性更新吗?
- iOS的CAKeyFrameAnimation缩放在animation结束的闪烁
- UITextView,在编辑时滚动?
- TestFlight Betatesting – 我们可以为不同的1000个外部testing人员提供同一个应用程序的多个版本
- iOS推送通知应用程序不要求注册许可
- 适用于iOS的自定义UIActionSheet
- UITablevlewCell中的UIImageView上的UITapGestureRecognizer没有被调用
- UIStackView中的第一个基线和最后一个基线属性
- 当我删除objective-c中的特定组时,如何从主AddressBook中删除联系人?