Swift自定义转场动画
来源:互联网 发布:linux怎么保存vim文件 编辑:程序博客网 时间:2024/05/17 12:51
1.通过storyBoard加载控制器
let sb = UIStoryboard(name: "WYPopViewController", bundle: nil) // 1.需要勾选箭头 let vc = sb.instantiateInitialViewController()! // 2.通过id加载 let vc = sb.instantiateViewControllerWithIdentifier("123")
2.设置代理
// 设置代理 vc.transitioningDelegate = popAnimation // vc.modalPresentationStyle = .Custom // 3.弹出控制器 presentViewController(vc, animated: true, completion: nil)
3.准守协议,实现方法(UIViewControllerTransitioningDelegate,UIViewControllerAnimatedTransitioning)
负责转场动画的控制器
// iOS8之后推出的 告诉系统谁来负责转场动画 func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? { let pop = WYPopPresentationController(presentedViewController: presented, presentingViewController: presenting) pop.presentFrame = presentFrame return pop }
告诉系统谁来负责Modal的展现动画
// MARK: - 只要实现了以下方法, 那么系统自带的默认动画就没有了, "所有"东西都需要程序员自己来实现 /** :param: presented 被展现视图 :param: presenting 发起的视图 :returns: 谁来负责 */ func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { isPresent = true // 发出通知,箭头朝上 NSNotificationCenter.defaultCenter().postNotificationName(PopViewWillShow, object: nil) return self }
- 告诉系统谁来负责动画的消失
/** - parameter dismissed: 被关闭的视图 - returns: */ func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { isPresent = false // 发出通知,箭头朝下 NSNotificationCenter.defaultCenter().postNotificationName(PopViewWillDismiss, object: nil) return self }
UIViewControllerAnimatedTransitioning的代理方法
/** 返回动画时长 :param: transitionContext 上下文, 里面保存了动画需要的所有参数 :returns: 动画时长 */ func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { return 0.5 }
- 告诉系统如何动画, 无论是展现还是消失都会调用这个方法
/** :param: transitionContext 上下文, 里面保存了动画需要的所有参数 */ func animateTransition(transitionContext: UIViewControllerContextTransitioning) { if isPresent{ //print("展开") let toView = transitionContext.viewForKey(UITransitionContextToViewKey) toView?.transform = CGAffineTransformMakeScale(1.0, 0.0) // 将试图添加到容器中 transitionContext.containerView()?.addSubview(toView!) // 修改锚点 toView?.layer.anchorPoint = CGPointMake(0.5, 0) // 执行动画 UIView.animateWithDuration(0.5, animations: { () -> Void in toView?.transform = CGAffineTransformIdentity }) { (_) -> Void in transitionContext.completeTransition(true) } }else{ //print("关闭") let formView = transitionContext.viewForKey(UITransitionContextFromViewKey) UIView.animateWithDuration(0.5, animations: { () -> Void in formView?.transform = CGAffineTransformMakeScale(1.0, 0.001) }, completion: { (_) -> Void in transitionContext.completeTransition(true) }) } }
4.自定义转场控制器
// 展示视图的尺寸 var presentFrame = CGRectZero /** - parameter presentedViewController: 被展示的控制器 - parameter presentingViewController: 执行转场的控制器 */ override init(presentedViewController: UIViewController, presentingViewController: UIViewController) { super.init(presentedViewController: presentedViewController, presentingViewController: presentingViewController) } /** 即将布局转场子视图时调用 */ override func containerViewWillLayoutSubviews() { // 设置展现视图的尺寸 if presentFrame == CGRectZero{ presentedView()?.frame = CGRectMake(100, 60, 200, 300) }else{ presentedView()?.frame = presentFrame } // 在容器上添加一个蒙版,用来移除modal出来的控制器 containerView?.insertSubview(cover, atIndex: 0) } func close () { presentedViewController.dismissViewControllerAnimated(true, completion: nil) } private lazy var cover : UIView = { let cover = UIView() // 设置尺寸 cover.frame = UIScreen.mainScreen().bounds // 颜色 cover.backgroundColor = UIColor.clearColor() // 添加手势 let tap = UITapGestureRecognizer(target: self, action: "close") cover.addGestureRecognizer(tap) return cover }()
效果图:
0 0
- Swift自定义转场动画
- 自定义presentViewController的转场动画(Swift)
- swift自定义转场动画(比较有难度)
- Swift-->ViewController跳转,转场以及自定义动画
- Swift 自定义转场动画 (没有封装)
- Swift转场动画类型
- swift中的转场动画
- 用swift写一个简单的自定义modal转场动画
- [iOS Swift] 自定义转场动画 UIViewControllerAnimatedTransitioning 报错
- iOS之转场动画/自定义转场动画
- iOS自定义转场动画
- iOS自定义转场动画
- 自定义转场动画
- IOS 自定义转场动画。
- 自定义Navigation转场动画
- iOS自定义转场动画
- UIPresentationController自定义转场动画
- UITabBarController自定义转场动画
- (二)H264语法及结构
- CentOS(6.5)安装lsb、查看系统版本信息
- catalina.out
- Android学习(一)TextView,ImageView,Button,EditText,控件
- Develop--Training(七)Getting Started--支持不同的设备
- Swift自定义转场动画
- 《JAVA与模式》之单例模式
- sublime插件安装
- 谷歌软件测试之道
- eclipse+maven进行hadoop开发出现"Missing artifact jdk.tools:jdk.tools:jar:1.7"
- Numpy的tile函数
- STL_算法_删除(unique、unique_copy)
- Android 内核之Android与Linux的关系
- 安卓设置imageview变暗的效果,类似于qq离线状态