UIPopoverController以及iOS9以后UIPopPresentationController的使用
来源:互联网 发布:淘宝企业店铺公示入口 编辑:程序博客网 时间:2024/04/30 11:22
/**
modalPresentationStyle:呈现样式
UIModalPresentationFullScreen 默认样式, 全屏
UIModalPresentationPageSheet 宽度保持768(横屏宽度),高跟View等高(会除去顶部状态栏)
UIModalPresentationFormSheet 居中显示, 占用屏幕的一部分 --> pad中较常见
*/
/**
modalTransitionStyle : 转场样式
UIModalTransitionStyleCoverVertical 垂直覆盖
UIModalTransitionStyleFlipHorizontal 类似win8的三维翻转效果
UIModalTransitionStyleCrossDissolve 淡入淡出
UIModalTransitionStylePartialCurl 翻页效果 --> 电子书类软件常见
- (IBAction)buttonClick:(id)sender {
// iOS8以后的兼容写法
// iOS8的时候,系统将popove作为模态视图的一种呈现样式
// 当系统检测到设备是iPhone时,直接以普通视图弹出
// 当系统检测到设备是iPad时,会以popover弹出
//1. 创建内容控制器
TableViewController *tableVC = [TableViewControllernew];
//如果是iPhone运行,相当于,自动会自动跳过下面几句代码,达到适配的目的
//2. 设置模态视图的呈现样式
tableVC.modalPresentationStyle =UIModalPresentationPopover;
//3. 设置UIPopoverPresentationController
//从iOS8以后, UIViewController,新增了一个属性popoverPresentationController
UIPopoverPresentationController *popover = tableVC.popoverPresentationController;
//3.1 指向BarButtonItem按钮
// popover.barButtonItem = self.navigationItem.leftBarButtonItem;
// popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
//3.2 指向自定义视图 --> 箭头方向可以不设置,默认就是Any
popover.sourceView = self.blueButton;
popover.sourceRect = self.blueButton.bounds;
//4. 模态视图弹出
[selfpresentViewController:tableVCanimated:YEScompletion:nil];
}
- (void)popoveriOS8
{
// iOS8以前的兼容写法 -->判断设备的类型
//1. 创建内容控制器
TableViewController *tableVC = [TableViewControllernew];
if ([UIDevicecurrentDevice].userInterfaceIdiom ==UIUserInterfaceIdiomPad ) {
//2. 创建popover
UIPopoverController *popover = [[UIPopoverControlleralloc]initWithContentViewController:tableVC];
//3. 弹出popover
[popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItempermittedArrowDirections:UIPopoverArrowDirectionAnyanimated:YES];
} elseif ([UIDevicecurrentDevice].userInterfaceIdiom ==UIUserInterfaceIdiomPhone) {
// 如果是iPhone, 则使用模态视图弹出即可
[selfpresentViewController:tableVCanimated:YEScompletion:nil];
}
}
#import "ViewController.h"
#import "TableViewController.h"
@interface ViewController ()<UIPopoverControllerDelegate>
@property (weak, nonatomic) IBOutletUIButton *redButton;
@property (weak, nonatomic) IBOutletUIButton *blueButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
//带有箭头指向的弹窗视图,显示在界面的最前面
- (IBAction)categoryClick:(id)sender {
//1. 创建内容控制器
TableViewController *tableVC = [TableViewControllernew];
//2. 创建Popover
UIPopoverController *popover = [[UIPopoverControlleralloc]initWithContentViewController:tableVC];
//3. 显示popover
[popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItempermittedArrowDirections:UIPopoverArrowDirectionAnyanimated:YES];
//4. 设置大小 默认大小是320 * 480
//两种方式:
// 一. 当前控制器中: popoverContentSize -->不推荐使用
// 二. 内容控制器中:preferredContentSize -->应该使用此属性来设置
popover.popoverContentSize = CGSizeMake(320, 3 * 44);
}
- (IBAction)redViewClick:(id)sender {
//1. 创建内容控制器
TableViewController *tableVC = [TableViewControllernew];
UINavigationController *nav = [[UINavigationControlleralloc]initWithRootViewController:tableVC];
//2. 创建Popover
UIPopoverController *popover = [[UIPopoverControlleralloc]initWithContentViewController:nav];
//3. 显示popover
//inView : 要指向的视图]
//Rect : 以指向的视图左上角为(0, 0)点,然后根据rect参数来定位
//ArrowDirection: 箭头方向, 一般都传Any,避免界面发生遮挡现象
[popover presentPopoverFromRect:self.redButton.boundsinView:self.redButtonpermittedArrowDirections:UIPopoverArrowDirectionAnyanimated:YES];
//[popover presentPopoverFromRect:self.redButton.frame inView:self.redButton.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
//4. 处理block
tableVC.selectColorBlock = ^(UIColor *color) {
//4.1 更改颜色 --> 传值
self.redButton.backgroundColor = color;
//4.2 消失popover
//[popover dismissPopoverAnimated:YES];
//5. 更改pooove的大小 -->带动画
//popover.popoverContentSize = CGSizeMake(100, 800);
// 不带动画, 可以用方法来实现 -->一般不推荐
//[popover setPopoverContentSize:CGSizeMake(100, 800) animated:NO];
//6. 更改内容控制器 --> 属性默认不带动画
UIViewController *vc = [UIViewControllernew];
vc.view.backgroundColor = [UIColorblueColor];
popover.contentViewController = vc;
// 带动画, 可以用方法来实现
//[popover setContentViewController:vc animated:YES];
};
//7. 设置穿透视图,设置哪些视图在popove显示的时候,仍旧能响应用户的点击事件
popover.passthroughViews = @[self.blueButton];
//8. 代理
popover.delegate = self;
}
- (IBAction)blueViewClick:(id)sender {
NSLog(@"点我啊");
}
#pragma mark 代理方法
// 设置点击背景时, 能否消失popover . 默认就是yes
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
return YES;
}
// 完成popove消失时调用 -->可以将一些需要保存的操作,放到这里
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
NSLog(@"%s",__func__);
}
// 当屏幕旋转的时候会调用
- (void)popoverController:(UIPopoverController *)popoverController willRepositionPopoverToRect:(inoutCGRect *)rect inView:(inoutUIView *__autoreleasing _Nonnull *)view
{
NSLog(@"%s",__func__);
}
}
// 如果AotoLayout勾选了,那么autoresizingMask默认会有跟上面及左边的联系.
// 所以,当视图发生大小的改变时,就会发生相对应的压缩行为.
//popover默认大小320 * 480 iPad控制器1024 *768
//当大的控制器,放大较小的控制器中中,就会发生压缩
//autoresizingMask : 自动伸缩
self.autoresizingMask =UIViewAutoresizingNone;
======================
iOS9中UIPoppresentationController代替UIPopoverController;
@interface ViewController ()<UIPopoverPresentationControllerDelegate>
PopVC *popvc=[[PopVCalloc]init];
//设置跳转模式为popover模式
popvc.modalPresentationStyle =UIModalPresentationPopover;
//获取到UIPopoverPresentationController对象
UIPopoverPresentationController* con = popvc.popoverPresentationController;
con.delegate=self;//设置代理
//设置弹出的基准视图
con.sourceView =self.popBtn;//以什么为基准
con.permittedArrowDirections= UIPopoverArrowDirectionLeft;//箭头的方向
con.sourceRect=CGRectMake(50,50,10,10);//设置尖头的位置
//注意:pop显示的大小和con.permittedArrowDirections和con.sourceRect都有关系;
[selfpresentViewController:popvcanimated:YEScompletion:nil];//弹出pop视图
//调用了这个代理方法可以设置不全频幕显示
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
returnUIModalPresentationNone;
}
- UIPopoverController以及iOS9以后UIPopPresentationController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用心得
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- 关于UIPopoverController的 使用
- UIPopoverController的使用
- UIPopoverController的使用心得
- UIPopoverController的使用
- iOS UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- UIPopoverController的使用
- linux系统中的时间及操作函数
- iOS获取通讯录联系人信息
- ios app上架AppStore注意事项及流程
- DataGridView中DataGridViewComboBoxColumn无法赋值问题
- Ubuntu 14.04 安装Xmind
- UIPopoverController以及iOS9以后UIPopPresentationController的使用
- libvlc外部api的简单整理
- Android L Settings改动介绍
- java实体类与xml数据互转
- Redis配置文件说明
- 今日头条2017后端工程师实习生笔试题
- FragMent的静态加载和动态加载
- Android调用系统相机和相册
- PopWindow放到具体控件的某一位置。