记录工程中遇到的变态产品的变态问题,吧啦吧啦……
搜索的资料,以及实验,貌似只能iOS 8+适用,不过iOS 7已经趋近淘汰,先不考虑了咯……
一 弹出半透明界面
先上效果图:
其实真的很简单,直接上代码吧
//弹出ViewController
XXxViewController *xVC = [XXxViewController new];
//设置ViewController的背景颜色及透明度
xVC.view.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
//设置ViewController的模态模式,即ViewController的显示方式
xVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;
self.modalPresentationStyle = UIModalPresentationCurrentContext;
//加载模态视图
[self presentViewController:xVC animated:YES completion:^{
}];
弹出NavigationController这个不用多解释吧,当你看到这个帖子的需求的时候,我相信你已经会把ViewController包一层NavigationController模态弹出了。
//弹出NavigationController
XXxViewController *xVC = [XXxViewController new];
//设置ViewController的背景颜色及透明度
xVC.view.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
//设置NavigationController根视图
UINavigationController *navigation = [[UINavigationController alloc]initWithRootViewController:xVC];
//设置NavigationController的模态模式,即NavigationController的显示方式
navigation.modalPresentationStyle = UIModalPresentationOverCurrentContext;
self.modalPresentationStyle = UIModalPresentationCurrentContext;
//加载模态视图
[self presentViewController:navigation animated:YES completion:^{
}];
Over完成,试试吧,其实真的很简单!
总结
关于模态的modalPresentationStyle解释。(嗯,我也是粘别人的~)
UIModalPresentationStyle即viewcontroller的显示方式
typedefNS_ENUM(NSInteger, UIModalPresentationStyle) {
UIModalPresentationFullScreen =0,//由下到上,全屏覆盖
UIModalPresentationPageSheet,//在portrait时是FullScreen,在landscape时和FormSheet模式一样。
UIModalPresentationFormSheet,// 会将窗口缩小,使之居于屏幕中间。在portrait和landscape下都一样,但要注意landscape下如果软键盘出现,窗口位置会调整。
UIModalPresentationCurrentContext,//这种模式下,presented VC的弹出方式和presenting VC的父VC的方式相同。
UIModalPresentationCustom,//自定义视图展示风格,由一个自定义演示控制器和一个或多个自定义动画对象组成。符合UIViewControllerTransitioningDelegate协议。使用视图控制器的transitioningDelegate设定您的自定义转换。
UIModalPresentationOverFullScreen,//如果视图没有被填满,底层视图可以透过
UIModalPresentationOverCurrentContext,//视图全部被透过
UIModalPresentationPopover,
UIModalPresentationNone ,
};
二 自定义弹出动画
记录工程中遇到的变态产品的变态问题 too,吧啦吧啦……
对于系统的模态弹出的方式只有四种:
typedef NS_ENUM(NSInteger, UIModalTransitionStyle) {
UIModalTransitionStyleCoverVertical = 0, // 底部滑入。
UIModalTransitionStyleFlipHorizontal, // 水平翻转。
UIModalTransitionStyleCrossDissolve, // 交叉溶解。
UIModalTransitionStylePartialCurl, // 翻页。
};
氮素挡不住产品(gou)想从上往下弹出,来吧,我们直接写动画吧~~
弹出
//自定义动画
CATransition *animation = [CATransition animation];
animation.duration = 0.3;
animation.type = kCATransitionMoveIn;
animation.subtype = kCATransitionFromBottom;
[self.view.window.layer addAnimation:animation forKey:nil];
//弹出ViewController
XXxViewController *xVC = [XXxViewController new];
[self presentViewController:xVC animated:YES completion:^{
}];
消失(原路返回消失)
CATransition *animation = [CATransition animation];
animation.duration = 0.3;
animation.type = kCATransitionReveal;
animation.subtype = kCATransitionFromTop;
[self.view.window.layer addAnimation:animation forKey:nil];
[self dismissViewControllerAnimated:NO completion:0];
总结
关于type和subtype:
setType:有四种类型:
kCATransitionFade //交叉淡化过渡
kCATransitionMoveIn //移动覆盖原图
kCATransitionPush //新视图将旧视图推出去
kCATransitionReveal //底部显出来
Subtype:有四种类型:
kCATransitionFromRight
kCATransitionFromLeft (默认值)
kCATransitionFromTop
kCATransitionFromBottom
目前内容已经完成,有什么好的建议欢迎讨论O(∩_∩)O哈哈哈~