让广告弹框变得简单(Swift3)!

前段时间由于公司项目需要加入广告弹框,上网找了一圈没有找到什么比较好的,最后用qiankai同学这个弹框改的这个
项目里的代码真的很垃圾:

判断广告时间:
屏幕快照 2016-10-21 下午3.00.31.png
判断下载广告图片和时候弹出广告:
屏幕快照 2016-10-21 下午3.02.30.png
获取广告数据:

屏幕快照 2016-10-21 下午3.04.27.png

啊。。。看着真的不爽,这TM什么东西!也怪自己当时水平有限!
Swift是什么?一门精致,简单,而不缺少思想的语言!
能把代码写成这个样子,真是很惭愧啊,然后就各种学习,什么函数式编程,面向接口编程烧脑体操,函数式Swift
突然有一天,哈哈,我看到了这篇关于转场的文章,突然脑子里就想到了,广告弹框,这可好像可以做广告弹框哦!但是当时并没有做,只是把代码下载下来看了一遍,然后就放在那里了。

几个转场库

1、https://github.com/applidium/ADTransitionController
2、https://github.com/DianQK/TransitionTreasury
3、https://github.com/ColinEberhardt/VCTransitionsLibrary
最近,公司没有什么事情,上午学习函数式Swift,下午就上github trending搜罗一些库。前天突然有看到了那段恶心的代码,随后又想起了那篇转场的文章,那就写一个吧!这样的库应该大家用得还是比较频繁的,毕竟广告能赚钱!
就拿着那个转场的demo改了一下,有个初步模样,然后新加了几种效果(其实就是在原来的基础上修改而已),今天下午差不多搞好了,但是没有做cocoapods 和Carthage,准备之后搞!

效果

bottomToTop.gif
overlayHorizontal.gif

代码

屏幕快照 2016-10-21 下午3.48.36.png

是不是相比较之前优雅很多,废话也不多说,也没有什么特别的难点,就是用人家的demo修改出来的。直接说说遇到的坑!

遇到的坑

因为广告弹框,其实有点像系统自带的alert,用转场做的,只是重写了转场动画而已。当转场的controller的view上什么也没有加的时候,之前的动画完全没有问题的,但是当加上需要显示内容的一个bannerView后,view的效果就被banner给挡住了,因为这段代码

override public func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white
        bannerView.set(images: images)
        bannerView.handleBack = selectedHandel
        bannerView.showPageControl = isShowPageControl
        view.addSubview(bannerView)
    }

是在controller,他是先于这个代理的

UIViewControllerAnimatedTransitioning

所以当bannerView加上去之后就会挡住在上面那个代理里面对view做的动画,试了几种,调透明,延时动画什么的,效果都不太好!又想起来之前做过的collection的cell移动,其实就是长按后,将按住的cell生成一张图片,障眼法而已。似乎用到这里也是可以的哦!果断把代码贴过来

func getSnap(targetView: UIView) -> UIImageView {
        UIGraphicsBeginImageContextWithOptions(targetView.bounds.size, false, 0.0)
        targetView.layer.render(in: UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return UIImageView(image: image)
    }

记住要把view调透明,依然是在上面那个代理里面做,里面有fromView和toView,这两个是相对的,看看代码,相信不难理解!
然后就是说上面截图的方法其实是在关闭广告的时候用到的,因为刚打开的时候,图片是传进来的,可以直接拿到!就是这么多,没有多少难得!
但我发现

bouds frame的一个区别

之前我只知道bounds的origin总是为CGPoint.zero,frame是相对他的,还有横屏的时候,需要改变bouds,但是做第二个动画的时候,我发现,你去改变bounds.size的时候,他是往中间变化的,frame.size是靠x=0和y=0的方向变化的

项目地址

ADController
我有什么说错的,或者没说明白的请留意,我会尽快改正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,241评论 4 61
  • 2017.11.25桂男分享连接真我指导灵与天使: 一.奇迹: 1.我今天非常开心,一早经销商就帮我打款,虽然是周...
    林桂男阅读 213评论 0 0
  • 自我09丨肛欲期:金钱态度之源 有感 老师今天的解读让我想起了那句经典的话语:视钱财如粪土。从此对它又有了新的解读...
    云熙聊亲密关系阅读 564评论 0 2
  • 星期日/多云转雨 小长假结束咯,回到学校开始学习啦! 加油呀! 不知道自己最近怎么回事,明明心情看起来还不错,可是...
    酒久里个丸子阅读 110评论 0 0
  • 嘀嗒,嘀嗒,嘀嗒 这墙上的长着三条腿的怪物 在和我们赛跑 我们快时,它不紧不慢 我们慢时,它不紧不慢 我亲眼看到父...
    叮咚的你阅读 550评论 3 1