美文网首页收藏swiftSwift开发Swift从入门到放弃
Swift4.2——组件化:一行代码搞定APP启动广告页

Swift4.2——组件化:一行代码搞定APP启动广告页

作者: 青苹果园 | 来源:发表于2018-01-21 12:18 被阅读339次

    介绍

    App启动广告页,支持播放Gif/png/jpg等。(组件中已经监听了app的 UIApplicationDidFinishLaunching 通知,通知来了会把广告页添加到keyWindow中,使用者只需要创建即可。)源码

    Swift 4.0~4.2
    iOS 8.0~..
    Xcode 9.0~10.0

    版本迭代

    - 2.1.0
      -  升级到Swift 4.2
    - 2.0.2
        -  修复显示广告页之前,闪现首页界面的问题
    - 2.0.1
        -  添加在广告页未加载完之前显示的占位图参数:placeholderImage,默认显示启动图
    

    广告页显示思路

    广告页的资源网络请求和显示都是在applection的didFinishLaunchingWithOptions方法中完成

    在显示广告页之前会先显示启动图,防止闪屏的问题

      1. 发起网络请求加载广告页资源,并把资源保存到本地以备展示;
      1. 从本地获取广告页资源并展示。

    这两有两个问题:

      1. 网络请求的方法和展示的方法是在didFinishLaunchingWithOptions方法中的,没有先后顺序;
      1. 最新的广告页资源请求结果并不会影响到本次的广告页展示,本次展示的是上一次请求的结果;

    思考:为什么会有以上两个问题呢?!
    因为我们的广告页是要在app的启动页完成之后展示,我们不可能等网络请求回调回来才去展示广告页,不然会影响用户的交互,所以网络请求和展示这是两个独立的部分。

    广告页组件封装的思路

    支持播放本地与网络Gif和图片资源。如果是网络资源先下载到本地,根据资源路径命名缓存。Gif的播放使用DispatchSource创建定时器+ ImageIO框架获取帧图片。

    Gif演示:

    播放Gif资源 播放图片资源

    配置Podfile

    pod 'AdvertisementView'
    

    执行pod命令,导入组件

    pod install
    

    可配置接口介绍

    1.实例化接口及可配置参数

    /// App启动广告页
    ///
    /// - Parameters:
    ///   - frame: 广告页大小,default: UIScreen.main.bounds
    ///   - duration: 广告页显示时间,default: 3秒
    ///   - delay: 广告页展示完成后的停留时间,default: 1.0秒
    ///   - adUrl: 广告资源路径(本地或网络链接,使用时只传入URL即可)
    ///   - isHiddenSkipBtn: 是否隐藏跳过按钮(true 隐藏; false 不隐藏),default: false
    ///   - isIgnoreCache: 是否忽略本地缓存(true 忽略; false 缓存),default: true
    ///   - placeholderImage: 在广告页未加载完之前显示的占位图,默认显示启动图
    ///   - completion: 用户点击广告事件的或公告展示完成的回调, isGotoDetailView 为ture表示点击了公告详情
    convenience public init(frame: CGRect = default, duration: Int = default, delay: Double = default, adUrl: String, isHiddenSkipBtn: Bool = default, isIgnoreCache: Bool = default, placeholderImage: UIImage?, completion: @escaping (_ isGotoDetailView: Bool) -> ())
    

    2.如果选择本地缓存网络资源,本地缓存清理接口

    /// 删除本地缓存的广告资源
    ///
    /// - Parameter url: 资源路径
    /// - Returns: 返回ture表示删除成功,false删除失败
    public class func clearAdDataFromLocal(_ url: String) -> Bool
    
    /// 删除本地所有缓存
    ///
    /// - Returns: 返回ture表示删除成功,false删除失败
    public class func clealAllLocalCache() -> Bool
    

    Example

    // 网络资源
    let adImageJPGUrl = "http://p5.image.hiapk.com/uploads/allimg/150112/7730-150112143S3.jpg"
    let adimageGIFUrl = "http://img.ui.cn/data/file/3/4/6/210643.gif"
    // 本地资源
    let adImageJPGPath = Bundle.main.path(forResource: "adImage2", ofType: "jpg") ?? ""
    let adImageGifPath = Bundle.main.path(forResource: "adImage3", ofType: "gif") ?? ""
    
    let _ = AdvertisementView(adUrl: adImageGifPath, isIgnoreCache: false, placeholderImage: nil, completion: { (isGotoDetailView) in
      print(isGotoDetailView)
    })
    

    代码请移步github

    相关文章

      网友评论

      • 208a7bd057be:有时候会先出现一下根控制器的页面,闪下再出现广告页,可能window的rootViewController已经设置好先显示了,再执行了你代码
        青苹果园:优化了显示广告页的过度代码,可以查看下是否为最新的代码,并运行demo测试:https://github.com/SilongLi/AdvertisementView 感谢支持!

      本文标题:Swift4.2——组件化:一行代码搞定APP启动广告页

      本文链接:https://www.haomeiwen.com/subject/xymfaxtx.html