- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有一个非常基本的 UIPresentationController,它基本上以屏幕为中心显示 contentView,它的大小由 View Controller preferredContentSize 决定。 (它非常类似于作为 FormSheet 呈现的常规模态视图 Controller )。
我想要实现的是能够动态更新此 View Controller View 的大小,只需更改它的 preferredContentSize。
当我设置 preferredContentSize 时,我的 UIPresentationController 子类在以下位置接收有关它的信息:
-(void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container
但是我怎样才能从这里调整带动画的 View 框架的大小?如果我只是打电话:
-(void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container
{
[UIView animateWithDuration:1.0 animations:^{
self.presentedView.frame = [self frameOfPresentedViewInContainerView];
} completion:nil];
}
立即调用 containerViewWillLayoutSubviews 并在没有动画的情况下更改框架。
-(void)containerViewWillLayoutSubviews
{
self.presentedView.frame = [self frameOfPresentedViewInContainerView];
}
请帮我想办法,用动画调整它的大小。它必须是可能的,因为它会随着动画调整大小,例如在发生旋转时。
最佳答案
无需在 preferredContentSizeDidChangeForChildContentContainer
中设置框架,您只需在容器 View 上调用 setNeedsLayout
和 layoutIfNeeded
。这会导致调用 containerViewWillLayoutSubviews
,这将使用您的动画配置更新框架。
objective-C :
- (void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container
{
[UIView animateWithDuration:1.0 animations:^{
[self.containerView setNeedsLayout];
[self.containerView layoutIfNeeded];
} completion:nil];
}
swift :
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
super.preferredContentSizeDidChange(forChildContentContainer: container)
guard let containerView = containerView else {
return
}
UIView.animate(withDuration: 1.0, animations: {
containerView.setNeedsLayout()
containerView.layoutIfNeeded()
})
}
或者,您不能在 preferredContentSizeDidChange...
中设置动画 block ,而是将 preferredContentSize
的赋值放在动画 block 中。
这样您就可以更好地控制各个过渡的动画速度。
objective-C :
- (void)preferredContentSizeDidChangeForChildContentContainer:(id<UIContentContainer>)container
{
[self.containerView setNeedsLayout];
[self.containerView layoutIfNeeded];
}
// In view controller:
[UIView animateWithDuration:0.25 animations:^{
self.preferredContentSize = CGSizeMake(self.view.bounds.width, 500.f);
}];
swift :
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
super.preferredContentSizeDidChange(forChildContentContainer: container)
guard let containerView = containerView else {
return
}
containerView.setNeedsLayout()
containerView.layoutIfNeeded()
}
// In view controller
UIView.animate(withDuration: 0.25) {
self.preferredContentSize = CGSize(width: self.view.width, height: 500)
}
关于ios - UIPresentationController preferredContentSize 更新动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961039/
我在应用商店中有一个应用程序,并且有一份崩溃报告显示偶尔会发生崩溃,详细信息如下: Incident Identifier: C25BD8DF-FAA9-4A5F-B3D2-6E1CE81F1D17
在 iOS 13 中,关闭 View Controller 时不会调用 viewWillAppear。作为一种解决方法,提到要重写 UIAdaptivePresentationControllerDe
我正在尝试做一个从底部向上滑动到特定高度的自定义通知 View 。我使用的是 UIPresentationController 但问题是当显示第二个 VC 时未检测到显示 VC 的 ViewContr
这就是我呈现自定义 UIPresentationController 的方式: func presentOverlayController(controller: UIViewController)
所以我有一个非常基本的 UIPresentationController,它基本上以屏幕为中心显示 contentView,它的大小由 View Controller preferredContent
我正在自定义一个 UIPresentationController 以将演示文稿模拟为 iOS 原生 .OverCurrentContext 或 .CurrentContext。 我发现无论我覆盖什么
截图: 我遇到了很多这样的崩溃,但问题是我只是被指向我的 appDelegate 第一行。我不知道在哪里寻找问题。我可以从以下崩溃报告开始调查的任何想法? Crashed: com.apple.mai
我的 View Controller 正在转向基于 UIPresentationController 的演示,但在使用 API 时遇到了一些困惑。 我有一个自定义侧边栏样式 View Controll
我有一个用于呈现 View Controller 的自定义转换,并使用 UIPresentationController 子类来执行呈现。 在演示 Controller 中,我向其 container
对于某些情况,我建议阅读以下内容: 非常相关的问题:"From View Controller" disappears using UIViewControllerContextTransitioni
iOS 13 似乎使用了一个新的 UIPresentationController 来呈现模态视图 Controller ,但它不依赖于拍摄呈现 View Controller 的快照(正如大多数/所
我正在使用 UIPresentationController 来显示自定义模式。演示 Controller 有一个 UIView 调光 View ,在显示时动画进出。模式本身是一个添加到展示 Cont
我正在使用 UIPresentationController,但我不知道如何让它以我想要的方式显示。 我正在编辑 frameOfPresentedViewInContainerView() 函数,我需
我使用 UIPresentationController 来显示我的向上滑动菜单,我的应用程序中还有标签栏菜单。我的向上滑动菜单显示在我的标签栏上方,但我希望它显示在我的标签栏上方? 所以现在它的行为
UIPresentationController 与仅使用添加 subview 和动画化您想要呈现的 View 相比有什么好处?它必须遵守的所有协议(protocol)似乎有点麻烦,许多人仍然喜欢用简
我使用 UIPresentationController 的子类在屏幕上显示一些 controller。我是这样准备的: controller.transitioningDelegate = self
我有一个自定义 UIPresentationController 并覆盖 frameOfPresentedViewInContainerView 用于自定义 viewController 演示。一切正
我有一个在通用 iOS 应用程序中呈现的 View Controller 。在 iPhone 上,它使用自定义 UIPresentationController 显示,该 Controller 使用
我正在使用自定义 UIPresentationController 子类来管理 UIViewController 的呈现。我正在覆盖 - (CGRect)frameOfPresentedViewInC
我正在使用自定义演示 Controller 制作类似于 UIAlertView 的内容。我希望它在键盘显示时向上移动。在 UIKeyboardWillShowNotification 处理程序中,我获
我是一名优秀的程序员,十分优秀!