【Swift】IOS开发中自定义转场动画
在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开发中自定义转场动画的更多相关文章
- iOS开发中自定义字体的方法
http://www.cnblogs.com/iyou/archive/2014/05/25/3751669.html 1. 首先下载你想要设置的字体库,例如设置方正启体简体 2. 添加到工程,一定要 ...
- 【swift,oc】ios开发中巧用自动布局设置自定义cell的高度
ios开发中,遇到自定义高度不定的cell的时候,我们通常的做法是抽取一个frame类,在frame类中预算好高度,再返回. 但是苹果出来自动布局之后...春天来了!!来看看怎么巧用自动布局设置自定义 ...
- Swift开发小技巧--自定义转场动画
自定义转场动画 个人理解为重写了被弹出控制器的modal样式,根据自己的样式来显示modal出来的控制器 例:presentViewController(aVC, animated: true, co ...
- iOS开发——自定义转场动画
首先是UIPresentationController,这个控制器给modal新的viewController提供了下一步的view和转场的管理,从一个viewController被modal出来到被 ...
- iOS开发自定义转场动画
1.转场动画 iOS7之后开发者可以自定义界面切换的转场动画,就是在模态弹出(present.dismiss),Navigation的(push.pop),TabBar的系统切换效果之外自定义切换动画 ...
- 一行代码实现自定义转场动画--iOS自定义转场动画集
WXSTransition 这款非常不错,力推 这是作者源码简书地址: http://www.jianshu.com/p/fd3154946919 这是作者源码github地址 https://git ...
- iOS自定义转场动画实战讲解
iOS自定义转场动画实战讲解 转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...
- iOS自定义转场动画的实现
iOS中熟悉的是导航栏中的push和pop这两种动画效果,在这里我们可以自己实现自己想要的一些转场动画 下面是我自己创建转场动画的过程 1.新建一个文件继承自NSObject ,遵循协议UIViewC ...
- iOS 自定义转场动画
代码地址如下:http://www.demodashi.com/demo/12955.html 一.总效果 本文记录分享下自定义转场动画的实现方法,具体到动画效果:新浪微博图集浏览转场效果.手势过渡动 ...
随机推荐
- android studio视频教学
英语+中文字幕: http://www.apkbus.com/plugin.php?id=buskc&modo=learn&kcid=82 中文字幕: http://www.maizi ...
- java中的IO 的示例
字符流 package jd_1; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNot ...
- gitignore忽略规则
我们用git提交本地代码时,有些文件或日志是不需要提交的,这个时候可以用.gitignore来解决这个问题: 首先,我们需要创建一个.gitignore文件,用命令输入 touch .gitignor ...
- C语言总结报告
1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当初报考计算机专业,是看到计算机专业在当今社会有良 ...
- 敏捷冲刺报告--Day5
敏捷冲刺报告--Day5 情况简介 GUI框架重写, 添加功能 任务进度 赵坤: 后端爬虫bug修复 李世钰: GUI编写 黄亦薇:更新sprint backlog.编写每日报告 王成科:召集小组成员 ...
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
android 自定义ScrollView实现强调内容背景图片伸缩(仿多米,qq空间背景的刷新) 看到一篇文章,自己更改了一下bug: 原文地址:http://www.aiuxian.com/arti ...
- 【技巧】Java工程中的Debug信息分级输出接口
也许本文的标题你们没咋看懂.但是,本文将带大家领略输出调试的威力. 灵感来源 说到灵感,其实是源于笔者在修复服务器的ssh故障时的一个发现. 这个学期初,同袍(容我来一波广告产品页面,同袍官网)原服务 ...
- Mysql-5.7.21安装配置
搞开发多年,其实MySql前前后后安装配置了无数次,但是每次都需要到网上搜教程,折腾半天才搞定,这次索性把整个过程全部记录下来,以便以后查阅. 下载 到MySql官网,导航找到DOWNLOADS> ...
- [JCIP笔记] (二)当我们谈线程安全时,我们在谈论什么
总听组里几个大神说起线程安全问题.本来对"线程安全"这个定义拿捏得就不是很准,更令人困惑的是,大神们用这个词指代的对象不仅抽象而且千变万化.比如,我们的架构师昨天说: " ...
- OpenShift实战(三):OpenShift持久化存储Registry
1.查看Registry组件的DC关于volume的定义 可以看到registry-storage这个挂载点被指向了一个/registry目录,使用的是empty directory,即数据保存在计算 ...