iOS开发总结(A0)- Custom View Controller Transition

如何实现custom transition

ios 8 下可结合UIPresentation 和UIViewControllerTransitioningDelegate

ios 7 下无UIPresentation(与ios 8下类似).

以下是在ios8下实现的:

1. 设置presentedvc 的modalPresentationStyle属性为UIModalPresentationCustom,并设置transitioningDelegate;

- UIModalPresentationCustom告诉系统presentedvc的transition将是自定义的;

- transitioningDelegate告诉系统处理自定义transition的代理是谁

- transitioningDelegate需实现UIViewControllerTransitioningDelegate协议

2.  实现transitioningDelegate的UIViewControllerTransitioningDelegate协议

a. 提供UIPresentationController(用来管理转场过程,下文详述)

- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(UIViewController *)presenting sourceViewController:(UIViewController *)source 

b. 提供转场动画(animator(需要遵守UIViewControllerAnimatedTransitioning协议))(下文讲详述)

// presentation 动画

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source

// dismiss 动画

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed

3. 用UIPresentationController管理转场过程

1)根据需要重写以下方法,控制转场过程

- (void)presentationTransitionWillBegin;
// 可在此方法中向试图层级中(containerview)增加custom view,并为custom view 添加动画(如增加dimming view)
// 添加动画可用以下方法实现
//- (BOOL)animateAlongsideTransition:(void (^)(id<UIViewControllerTransitionCoordinatorContext>context))animation completion:(void (^)(id<UIViewControllerTransitionCoordinatorContext>context))completion;
//或者
//- (BOOL)animateAlongsideTransitionInView:(UIView *)view animation:(void (^)(id <UIViewControllerTransitionCoordinatorContext>context))animation completion:(void (^)(id<UIViewControllerTransitionCoordinatorContext>context))completion;

- (void)presentationTransitionDidEnd:(BOOL)completed;
// 如果completed 为no,可以清理视图层级

- (void)dismissalTransitionWillBegin;
// 可控制custom view的动画

- (void)dismissalTransitionDidEnd:(BOOL)completed;
// 可清理视图层级 

2)控制containerview中view的大小

-(CGRect)frameOfPresentedViewInContainerView
//设定presentation 完成时presneted view 的大小

-(CGSize)sizeForChildContentContainer:(id<UIContentContainer>)container withParentContainerSize:(CGSize)parentSize
// 此为uicontentcontainer中的协议方法(每个viewcotroller 和UIPresentationController遵守该协议),返回ChildContentContainer的大小

3)layout

-(void)containerViewWillLayoutSubviews
//可用来控制旋转时,containerView中各view 的大小

4. 提供转场动画,主要实现以下两个方法

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext;
// 告知动画持续时间

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
// 告知如何动画,利用transitionContext提供的信息,在动画中改变transition涉及的view的geometry。
// 可以讲[transitionContext containerView] 看作动画板,可在其中添加,移除view,并改变geometry
// 如果是present,containerView不包含toview,需要手动添加
时间: 2024-10-26 01:48:16

iOS开发总结(A0)- Custom View Controller Transition的相关文章

全面理解iOS开发中的Scroll View

转自:http://mobile.51cto.com/hot-430409.htm 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方法,但这些方法只是UIView一些属性的表面而已.因此,要想弄懂UIScrollView是怎么工作之前,你需要了解 UIView,特别是视图渲染过程的两步. 光栅化和组合 渲染过程的第一部分是众所周知的光栅化,光栅化简单的说就是产生一组绘图指令并且生成一张图片.比如绘制一个圆角矩形.带图片.标题居中的U

全面理解iOS开发中的Scroll View[转]

from:http://mobile.51cto.com/hot-430409.htm 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方法,但这些方法只是UIView一些属性的表面而已.因此,要想弄懂UIScrollView是怎么工作之前,你需要了解 UIView,特别是视图渲染过程的两步. AD: 可能你很难相信,UIScrollView和一个标准的UIView差异并不大,scroll view确实会多一些方法,但这些方法只是UI

iOS开发UI之自定义View

1. 通过代码自定义View,创建一个View类(继承UIView),一个View中包含一个UIImageView和一个UILabel 外界用alloc] init]方法创建对象时,系统默认会自动调用initWithFrame:(CGRect)frame方法,所以要创建对象View中的子控件需要重写initWithFrame:(CGRect)frame方法,在这个方法中来创建子控件,但不能对其根据创建这个类创建出来的对象尺寸来设置,需要调用 - (void)layoutSubviews 这个方法

IOS开发—通过ChildViewController实现view的切换

ChildViewController的应用 viewControlle中可以添加多个subView,在需要的时候显示出来:另一种方法是通过向parentViewController中可以添加多个childCiewController;来控制页面中的subView,降低代码耦合度:通过切换子视图控制器,可以显示不同的view:,替代之前的addSubView的管理. 本节通过类似百度新闻模块切换的界面来演示ChileViewController的应用: 文档结构: 代码演示: #import "

ios开发之--为父view上的子view添加阴影

项目中碰到一个问题,在tableview的headerview里面有很一个子view,设计师的要求是在下方添加一个阴影,效果如下: 以前的实现思路就是,代码如下: 添加阴影 调用视图的 layer CALayer *layer = [imageView layer]; layer.shadowOffset = CGSizeMake(0, 3); //(0,0)时是四周都有阴影 layer.shadowRadius = 5.0; layer.shadowColor = [UIColor black

【IOS笔记】View Controller Basics

View Controller Basics   视图控制器基础 Apps running on iOS–based devices have a limited amount of screen space for displaying content and therefore must be creative in how they present information to the user. Apps that have lots of information to display

自定义View Controller转换动画

原文链接 : Introduction to Custom View Controller Transitions and Animations 原文作者 : joyce echessa 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 观察 iOS 自带的 App,你会看到当你从一个视图导航到另一个视图时总是会显示各种各样的转换动画,以"主-从"视图为例(类似的程序有Messages App或者系统设置程序),一个轻扫动作能够让详情视图呈现在主视图之上,在呈

iOS开发 : Navigation Bar的简单设置

前面的一篇文章<iOS开发16:使用Navigation Controller切换视图>中的小例子在运行时,屏幕上方出现的工具栏就是Navigation Bar,而所谓UINavigationItem就可以理解为Navigation Bar中的内容,通过编辑UINavigationItem,我们可以使得在Navigation Bar中显示想要的东西,比如设置标题.添加按钮等. 这篇博客将会以一个小例子来演示如何设置UINavigationItem. 现在我用的是Xcode 4.3,在使用上跟X

组合View Controller时遇到的一点问题

View Controller的组合应用其实很常见了,比如说Tab bar controller和Navigation view controller的组合使用,像这种一般都是Navigation view controller作为Tab bar controller的一个child view controller,对应了一个Tab bar item. 然后今天在Review 另外一组的一个产品的代码时,发现他们将Tab bar controller作为了一个普通view controller的