UIPresentationController是提供高级视图切换的类。它让管理present ViewController的过程变得简单。
先讲一些presentation基础知识,在iPad的设置页面,可以通过popOver弹出一个UIViewController,这个弹出的,可以和用户交互的Controller叫做PresentedViewController,而后面那个被部分遮挡的UIViewController叫做PresentingViewController.
而在UIPresentationController中,PresentedViewController是presentation的content,而PresentingViewController叫做Chrome。如下图:
所有的UIViewController的presentation都是由UIPresentationController管理的。在UIPresentationController中可以定义content和chrome的动画,可以根据大小的变化来改变content大小,可以根据系统的不同,来改变展示方式,UIPresentationController也是可复用的,可以很容易的拿到其他的UIViewController中去使用。
UIPopoverPresentationController
它在iOS8中替代了UIPopoverController,它在功能上与旧的controller完全等同,并且新增了一些内置的适配特性,可以自动适配iPad与iPhone。以下是新版与旧版接口的比较:
UIPopoverController使用方法:
UIViewController *contentController = [[UIViewController alloc] init];
UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:contentController];
[poc presentPopoverFromBarButtonItem:itemButton
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
self.xxController = poc;
需要消除时:[self.xxController dismissPopoverAnimated:YES];
我们先声明了一个UIViewController作为content controller,使用它初始化了一个UIPopoverController,然后调用presentPopover方法来展示它。
然而我们如果使用UIPopoverPresentationController,使用方法如下:
UIViewController *contentController = [[UIViewController alloc] init];
contentController.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController *popPC = languageListController.popoverPresentationController;
popPC.barButtonItem = itemButton;
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
popPC.delegate = self;
[self presentViewController:contentController animated:YES completion:nil];
需要消除时:[self dismissViewControllerAnimated:YES completion:nil];
将UIViewController的modalPresentationStyle设置成UIModalPresentationPopover,这个值用来实现popover效果,并且各个平台自动适应。第二行中,通过popoverPresentationController属性来获取它的popoverPresentationController,而不是创建一个新的。然后设置它的一些界面属性,最后调用presentViewController方法来显示这个controller。这样就可以在iPad与iPhone显示自动适应的popover效果了
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection
用于设置弹出的样式:UIModalPresentationOverFullScree,UIModalPresentationOverCurrentContext,UIModalPresentationPopover等