让广告弹框变得简单(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
我有什么说错的,或者没说明白的请留意,我会尽快改正