在好例子网,分享、交流、成长!
您当前所在位置:首页Swift 开发实例Swift语言基础 → iOS弹出层设置(Presentation.swift)

iOS弹出层设置(Presentation.swift)

Swift语言基础

下载此实例
  • 开发语言:Swift
  • 实例大小:6.89KB
  • 下载次数:4
  • 浏览次数:83
  • 发布时间:2021-04-20
  • 实例类别:Swift语言基础
  • 发 布 人:steven834826959
  • 文件格式:.swift
  • 所需积分:4
 相关标签: iOS 弹出层 OS 弹出 IO

实例介绍

【实例简介】

   Present方式弹出设置

【核心代码】


public class Presentation: UIPresentationController {

    lazy fileprivate var blackView: UIView = {

        let view = UIView()

        if let frame = self.containerView?.bounds {

            view.frame = frame

        }

        return view

    }()

    override public func presentationTransitionWillBegin() {

        presentedView?.frame = UIScreen.main.bounds

        containerView?.addSubview(blackView)

        containerView?.addSubview(presentedView ?? UIView())


        presentingViewController.transitionCoordinator?.animateAlongsideTransition(in: blackView, animation: { (context) in

            self.blackView.backgroundColor =  colorLiteral(red: 0, green: 0, blue: 0, alpha: 1).withAlphaComponent(0.5)

        }, completion: { (context) in

            

        })

    }

    override public func dismissalTransitionWillBegin() {

        presentingViewController.transitionCoordinator?.animateAlongsideTransition(in: blackView, animation: { (context) in

            self.blackView.alpha = 0

        }, completion: { (context) in

            

        })

    }

    override public func dismissalTransitionDidEnd(_ completed: Bool) {

        if completed {

            presentedView?.removeFromSuperview()

            blackView.removeFromSuperview()

        }

    }

    

}


//动画的类

class AnimatedTransitioning: NSObject, UIViewControllerAnimatedTransitioning {

    

    var present: Bool = true

    var direction: Direction = .Up

    var dismissDirection: Direction = .Up

    

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {

        return 0.65

    }

    

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        if present {

            showDirecton(dir: direction, transitionContext: transitionContext)

        }else{

            showDirecton(dir: dismissDirection, transitionContext: transitionContext)

        }

        

    }

    fileprivate func showDirecton(dir: Direction, transitionContext: UIViewControllerContextTransitioning){

        

        if present {

            //创建控制器

            let toView = transitionContext.view(forKey: UITransitionContextViewKey.to)

            

            switch dir {

            case.down:

                //从上向下

                 toView?.frame.origin.y = -(toView?.frame.height ?? UIScreen.main.bounds.height)

                break

            case .Up:

                //从下向上

                 toView?.frame.origin.y = toView?.frame.height ?? UIScreen.main.bounds.height

                 break

            case .left:

                //从左向右

                 toView?.frame.origin.x = -(toView?.frame.width ?? UIScreen.main.bounds.width)

                 break

            case .right:

                //从右向左

                toView?.frame.origin.x = toView?.frame.width ?? UIScreen.main.bounds.width

                 break


            }


            UIView.animate(withDuration: 0.45, delay: 0.0, usingSpringWithDamping: 0.90, initialSpringVelocity: 1.0 / 0.5, options: .curveEaseInOut, animations: {

                switch dir{

                case .Up, .down:

                    toView?.frame.origin.y = 0

                    break

                case .left, .right:

                    toView?.frame.origin.x = 0

                    break

                }

            }) { (finished) in

                transitionContext.completeTransition(true)

            }

            

        }else{

            

            let fromView = transitionContext.view(forKey: UITransitionContextViewKey.from)

            //销毁控制器

            

            UIView.animate(withDuration: 0.45, delay: 0.0, usingSpringWithDamping: 0.90, initialSpringVelocity: 1.0 / 0.5, options: .curveEaseInOut, animations: {

                switch dir{

                case .Up:

                    fromView?.frame.origin.y = fromView?.frame.height ?? UIScreen.main.bounds.height

                    break

                case .down:

                    fromView?.frame.origin.y = -(fromView?.frame.height ?? UIScreen.main.bounds.height)

                    break

                case .left:

                    fromView?.frame.origin.x = -(fromView?.frame.width ?? UIScreen.main.bounds.width)

                    break

                case .right:

                    fromView?.frame.origin.x = fromView?.frame.width ?? UIScreen.main.bounds.width

                    break

                }

            }) { (finished) in

                transitionContext.completeTransition(true)

            }

//            UIView.animate(withDuration: 0.45, delay: 0.0, options: [.curveEaseInOut], animations: {

//

//

//            }) { (finished) in

//                transitionContext.completeTransition(true)

//            }

        }


    }


}


标签: iOS 弹出层 OS 弹出 IO

实例下载地址

iOS弹出层设置(Presentation.swift)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警