如何使用 iOS 7 自定义转换在顶部呈现半模态视图控制器
Posted
技术标签:
【中文标题】如何使用 iOS 7 自定义转换在顶部呈现半模态视图控制器【英文标题】:How to present a half modal view controller over the top with iOS 7 custom transitions 【发布时间】:2014-04-05 00:34:44 【问题描述】:我将如何在主视图控制器的顶部显示一个“半视图”控制器?
要求: - 呈现第二个视图控制器,它滑过主视图控制器的顶部。 - 第二个视图控制器应该只显示主视图控制器的一半以上 - 主视图控制器应该在第二个视图控制器后面保持可见(透明背景,下面不显示黑色) - 第二个视图控制器应该使用类似于模态垂直覆盖或 ios 7 自定义过渡的动画进行动画处理 - 当第二个视图控制器处于活动状态时,用户仍然可以与主视图控制器上的按钮进行交互(即第二个视图控制器不覆盖整个主视图控制器)r - 第二个视图控制器有自己复杂的逻辑(不能是简单的视图) - 故事板、Segues、仅限 iOS 7 - 仅限 iPhone,不支持 iPad。
我尝试过使用模态视图控制器,但这不允许与主视图控制器进行交互。有人可以提供一个如何使用 iOS7 自定义转换或其他方法执行此操作的示例。
【问题讨论】:
看看 UIActionSheet ,它可能会解决你的问题。这是您可以开始使用的链接:eureka.ykyuen.info/2010/04/14/iphone-uiactionsheet-example 【参考方案1】:一种方法是将“半模态”控制器添加为子视图控制器,并为其视图设置动画。对于此示例,我在情节提要中创建了“半模态”控制器,其框架高度为 4 英寸 iPhone 屏幕的一半。您可以使用更多动态方法来考虑不同的屏幕尺寸,但这应该可以帮助您入门。
@interface ViewController ()
@property (strong,nonatomic) UIViewController *modal;
@end
@implementation ViewController
- (IBAction)toggleHalfModal:(UIButton *)sender
if (self.childViewControllers.count == 0)
self.modal = [self.storyboard instantiateViewControllerWithIdentifier:@"HalfModal"];
[self addChildViewController:self.modal];
self.modal.view.frame = CGRectMake(0, 568, 320, 284);
[self.view addSubview:self.modal.view];
[UIView animateWithDuration:1 animations:^
self.modal.view.frame = CGRectMake(0, 284, 320, 284);;
completion:^(BOOL finished)
[self.modal didMoveToParentViewController:self];
];
else
[UIView animateWithDuration:1 animations:^
self.modal.view.frame = CGRectMake(0, 568, 320, 284);
completion:^(BOOL finished)
[self.modal.view removeFromSuperview];
[self.modal removeFromParentViewController];
self.modal = nil;
];
【讨论】:
这很好用。很好的解决方案。从模态视图控制器内部中消除此模态的最佳方法是什么? (不是主视图控制器的切换) @johnsampson,您可以使用 self.parentViewController 获取指向主视图控制器的指针,并使用它来调用 toggleHalfModal。 对不起。我是一个真正的初学者。由于您的代码,我得到了模式工作。如何使用 self.parentViewController 从模态调用 toggleHalfModal? @johnsampson,就像你调用任何方法一样——[objectToSendMessageTo message];在这种情况下,您要向其发送消息的对象是 self.parentViewController(您必须对其进行强制转换,以便编译器知道它是什么,并导入它的 .h 文件)。所以这给了你 [(MainViewController *)self.parentViewController toggleHalfModal];用该控制器的类名替换 MainViewController。 @Septronic,一种方法是在新视图中制作动画之前,在原始视图上方添加一个半透明(低 alpha 值的黑色)视图。以上是关于如何使用 iOS 7 自定义转换在顶部呈现半模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
IOS 7:添加具有透明度的模态 ViewController:自定义大小
iOS 7 在 UINavigationController 中呈现模式视图?
animateTransition 不再适用于 iOS 13 中模态呈现的 viewController
如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?