gpt4 book ai didi

ios - 为什么不使用 frameOfPresentedViewInContainerView 定义我的 View Controller 大小使其达到该大小?

转载 作者:技术小花猫 更新时间:2023-10-29 10:38:54 25 4
gpt4 key购买 nike

我一直在关注 this tutorial关于在 iOS 8 中使用 UIPresentationController 实现自定义 View Controller 转换,到目前为止一切都很有意义,但我似乎无法让我的 View Controller 达到正确的大小。

在该教程中,他们有以下代码:

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 方法中实现一个随机大小。

最佳答案

UIKit 使用 frameOfPresentedViewInContainerView 获取初始 presentedView 的帧,然后将其传递给动画师(符合 UIViewControllerAnimatedTransitioning 协议(protocol)),以便它在设置时知道呈现 View 的目标位置动画。在呈现动画完成并且呈现在屏幕上之后,或者由于旋转或尺寸类更改,其中一个父 View Controller 可能仍会调整大小。 UIPresentationController 实例有机会在 containerViewWillLayoutSubviews 方法中响应这些更改,并适本地调整 presentedView 的大小。

换句话说,呈现 Controller 始终负责确定呈现 View 的布局,但最初它只是告诉 UIKit 框架是什么,以便动画师可以使用此信息,但之后呈现 Controller 将框架设置在直接呈现 View 。

关于ios - 为什么不使用 frameOfPresentedViewInContainerView 定义我的 View Controller 大小使其达到该大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com