iOS8新特性 UIPresentationController

UIPresentationController是提供高级视图切换的类。它让管理present ViewController的过程变得简单。

先讲一些presentation基础知识,在iPad的设置页面,可以通过popOver弹出一个UIViewController,这个弹出的,可以和用户交互的Controller叫做PresentedViewController,而后面那个被部分遮挡的UIViewController叫做PresentingViewController.

iOS8新特性 UIPresentationController_第1张图片

而在UIPresentationController中,PresentedViewController是presentation的content,而PresentingViewController叫做Chrome。如下图:

iOS8新特性 UIPresentationController_第2张图片
iOS8新特性 UIPresentationController_第3张图片

所有的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等

你可能感兴趣的:(iOS8新特性 UIPresentationController)