我一直在跟随这个教程,学习如何使用UIPresentationController
在iOS 8中实现自定义视图控制器转换。到目前为止,一切都很清晰,但我似乎无法使我的视图控制器达到正确的大小。
在那个教程中,他们有以下代码:
class OverlayPresentationController: UIPresentationController {
let dimmingView = UIView()
override init(presentedViewController: UIViewController!, presentingViewController: UIViewController!) {
super.init(presentedViewController: presentedViewController, presentingViewController: presentingViewController)
dimmingView.backgroundColor = UIColor(white: 0.0, alpha: 0.5)
}
override func presentationTransitionWillBegin() {
dimmingView.frame = containerView.bounds
dimmingView.alpha = 0.0
containerView.insertSubview(dimmingView, atIndex: 0)
presentedViewController.transitionCoordinator()?.animateAlongsideTransition({
context in
self.dimmingView.alpha = 1.0
}, completion: nil)
}
override func dismissalTransitionWillBegin() {
presentedViewController.transitionCoordinator()?.animateAlongsideTransition({
context in
self.dimmingView.alpha = 0.0
}, completion: {
context in
self.dimmingView.removeFromSuperview()
})
}
override func frameOfPresentedViewInContainerView() -> CGRect {
return containerView.bounds.rectByInsetting(dx: 30, dy: 30)
}
override func containerViewWillLayoutSubviews() {
dimmingView.frame = containerView.bounds
presentedView().frame = frameOfPresentedViewInContainerView()
}
}
除了 frameOfPresentedViewInContainerView
,我都懂。它返回一个尺寸,但是,如果我在 containerViewWillLayoutSubviews
中删除 presentedView().frame = frameOfPresentedViewInContainerView()
,它就不起作用。为什么我必须有那一行?你会认为函数本身足够了,否则我会在 containerViewWillLayoutSubviews
方法中实现一个随机尺寸。