在IOS开发中,我们model另外一个控制器的时候,一般都使用默认的转场动画。

其实我们可以自定义一些转场动画。达到不同的转场效果。

步骤如下:(photoBrowser是目标控制器)

1.在源控制器中,设置目标控制器的转场代理为 self

 //设置Model转场代理
 photoBrowser.transitioningDelegate = self

2.同时设置目标控制器的model类型

 //设置Model类型
photoBrowser.modalPresentationStyle=UIModalPresentationStyle.Custom

3.定义一个变量记录转场还是退场 (true为转场,false为退场

 var isPersent =  false

4.在源控制器中设置跳转,目标控制器中设置关闭(动画要选择true)

 presentViewController(photoBrowser, animated: true) { () -> Void in }
dismissViewControllerAnimated(true){SVProgressHUD.dismiss()}

5.源控制器遵守两个代理

UIViewControllerTransitioningDelegate,

UIViewControllerAnimatedTransitioning

6.源控制器实现2个代理方法

 func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning?{
//转场
isPersent = true
//源控制器自己负责转场
        return self
} func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?{ //退场
isPersent = false
//源控制器自己负责转场
        return self
}

7.源控制器再实现2个代理方法

 //转场时间
func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval //转场上下文,负责转场动画的具体内容
func animateTransition(transitionContext: UIViewControllerContextTransitioning){
//转场动画
        if isPersent{
            if let toView = transitionContext.viewForKey(UITransitionContextToViewKey){
                //将傀儡视图(用于动画时展现的画面)加入containerView()
               transitionContext.containerView().addSubview(self.persentedDummyView!)
                toView.frame = CGRectZero
                self.persentedDummyView?.frame = CGRectZero                 UIView.animateWithDuration(2.0, animations: { () -> Void in
                     self.persentedDummyView?.frame = transitionContext.containerView().frame
                    toView.frame = UIScreen.mainScreen().bounds
                }, completion: { (_) -> Void in
                    //移除傀儡视图
                     self.persentedDummyView?.removeFromSuperview()
                    //加入要正常显示的视图
                    transitionContext.containerView().addSubview(toView)
                    //结束
                    transitionContext.completeTransition(true)
                })
            }
        }
        //退场动画
        if !isPersent{
            if let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey){
                
                //隐藏目标控制器
                let fromVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as! HJCPhotoBrowserViewController
                fromVC.view.hidden = true
               //获得fromVC的快照
                let dummy = fromVC.collectionView.visibleCells().last!.snapshotViewAfterScreenUpdates(false)
                //将傀儡视图放入containerView
                transitionContext.containerView().addSubview(dummy)
                //执行动画
                UIView.animateWithDuration(2.0, animations: { () -> Void in
                       dummy.frame = CGRectZero
                    }, completion: { (_) -> Void in
                        //移除傀儡视图
                        dummy.removeFromSuperview()
                        //结束
                        transitionContext.completeTransition(true)
                })
            }
        }
    } }

【Swift】IOS开发中自定义转场动画的更多相关文章

  1. iOS开发中自定义字体的方法

    http://www.cnblogs.com/iyou/archive/2014/05/25/3751669.html 1. 首先下载你想要设置的字体库,例如设置方正启体简体 2. 添加到工程,一定要 ...

  2. 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度

    ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...

  3. Swift开发小技巧--自定义转场动画

    自定义转场动画 个人理解为重写了被弹出控制器的modal样式,根据自己的样式来显示modal出来的控制器 例:presentViewController(aVC, animated: true, co ...

  4. iOS开发——自定义转场动画

    首先是UIPresentationController,这个控制器给modal新的viewController提供了下一步的view和转场的管理,从一个viewController被modal出来到被 ...

  5. iOS开发自定义转场动画

    1.转场动画 iOS7之后开发者可以自定义界面切换的转场动画,就是在模态弹出(present.dismiss),Navigation的(push.pop),TabBar的系统切换效果之外自定义切换动画 ...

  6. 一行代码实现自定义转场动画--iOS自定义转场动画集

    WXSTransition 这款非常不错,力推 这是作者源码简书地址: http://www.jianshu.com/p/fd3154946919 这是作者源码github地址 https://git ...

  7. iOS自定义转场动画实战讲解

    iOS自定义转场动画实战讲解   转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...

  8. iOS自定义转场动画的实现

    iOS中熟悉的是导航栏中的push和pop这两种动画效果,在这里我们可以自己实现自己想要的一些转场动画 下面是我自己创建转场动画的过程 1.新建一个文件继承自NSObject ,遵循协议UIViewC ...

  9. iOS 自定义转场动画

    代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...

随机推荐

  1. python爬虫解决gbk乱码问题

    今天尝试了下爬虫,爬取一本小说,忘语的凡人修仙仙界篇,当然这样不好,大家要支持正版. 爬取过程中是老套路,先获取网页源代码 # -*- coding:UTF-8 -*- from bs4 import ...

  2. Java基础笔记(7)----三个修饰符

    abstract抽象 方法 抽象方法:abstract修饰的方法,只有声明 而没有方法的实现(连{}都没有). 语法:修饰符 返回值类型 方法名(形参列表); 注意:抽象方法 必须定义在 抽象类中. ...

  3. %f使用时的注意事项

    1不是所有定义都用int,使用浮点函数需要把int改成float才能正常工作 2保留一位小数时要打入%0.1f,保留两位小数时要打入%0.2f,而不是%0.01f

  4. beta冲刺总结

    前言: 经过一周的努力,对alpha版本进行不断的更新,得到了beta版本. 主要成员介绍: 成员 性格 优点 缺点 主要工作 黄紫仪 努力奋斗型 努力奋斗,爱学习 爱吐槽 功能点修改和部分界面修改, ...

  5. Tornado介绍及自定义组件

    Tornado 的性能是相当优异的,因为它试图解决一个被称之为"C10k"问题,就是处理大于或等于一万的并发.一万呀,这可是不小的量 条件:处理器为 AMD Opteron, 主频 ...

  6. bzoj千题计划274:bzoj3779: 重组病毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3779 有一棵树,初始每个节点有不同的颜色 操作1:根节点到x的路径上的点 染上一种没有出现过的颜色 ...

  7. bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD

    http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于  GCD(a, b)  a>b 若 a 为奇数,b 为偶数,GCD ...

  8. 从Nest到Nesk -- 模块化Node框架的实践

    文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...

  9. 解决vue2.0路由 TypeError: Cannot read property 'matched' of undefined 的错误问题

    刚开始使用vue-router2.0,虽然也用了vux,用起来却发现一个问题--具体如下: 正常情况下使用脚手架跑完之后,然后修改源项目,首先在main.js入口里把该import进去的vuex,vu ...

  10. Java面试题合集(二)

    接下来几篇文章准备系统整理一下有关Java的面试题,分为基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注: ...