• 模仿斗鱼直播


    最近直播比较火,比如喵播,映客等等,我也利用闲暇时间模仿了斗鱼,供大家互相学习,有哪些不足的地方,还请大家多多讨论交流

    斗鱼直播是比较火热的,里面包括了秀场直播,和游戏直播,直播中的所用的到技术是非常多的,比如,送礼物,聊天,弹幕,....

    这里我刚刚开始模仿,所以写的东西不多,后续会更新在 gitHub 上 https://github.com/SummerHH/douYuLive.git 

    先说说已经实现的效果了吧,

    1.斗鱼引导页是实现,2.斗鱼 导航设置了导航栏的pop和push手势,也就是去掉了系统自带的边缘手势,换成了全屏的pop手势(Swift版)

    RootNavigationController中屏蔽了系统的手势添加全局手势重写 push pop 方法

    ScreenShotView中是添加 pop动画返回是的黑色视图

    APPdelegate中添加视图

        var screenshotView: ScreenShotView?
     
     screenshotView = ScreenShotView(frame: CGRect(x: 0, y: 0,  (self.window?.frame.width)!, height: (self.window?.frame.height)!))
            window?.insertSubview(screenshotView!, at: 0)
            screenshotView?.isHidden = true

      

    定义基类BaseViewController,在 controller中

    是否支持自定义拖动pop手势,默认yes,支持手势 设置 true 支持手势

        var enablePanGesture: Bool = true //是否支持自定义拖动pop手势,默认yes,支持手势

    BaseViewController中设置contentView正在加载中动画,定义两个方法,在子类中,开启,关闭动画,随时调用

    extension BaseViewController {
        func setupUI() {
            // 1.隐藏内容的View
            contentView?.isHidden = true
            
            // 2.添加执行动画的UIImageView
            view.addSubview(animImageView)
            
            // 3.给animImageView执行动画
            animImageView.startAnimating()
            
            // 4.设置view的背景颜色
            view.backgroundColor = UIColor(r: 250, g: 250, b: 250)
        }
        
        func loadDataFinished() {
            // 1.停止动画
            animImageView.stopAnimating()
            
            // 2.隐藏animImageView
            animImageView.isHidden = true
            
            // 3.显示内容的View
            contentView?.isHidden = false
        }
    }

    2.设置了广告加载页,loadingAdvertisingPages

    加载广告页原理:第一次项目加载引导页时不显示此页,以后每次加载广告页,当然广告也是可以打开链接的,

    正常情况下,加载写的图片是可以换的,这个是由服务器来判定的,加载启动页的图片是由服务器返回,客户端下载展示,当然,并不是每次打开 APP 都要下载一遍,

    是只有更换图片的时候才会从新下载,保存本地,这需要服务器返回一个图片的 Id ,客户端每次需要判断 Id 是否一致,如果 id有变动,从本地中删除原来图片,下载最新的,如果一样,直接从本地中取出原来图片即可,这里下载图片使用了Kingfisher框架,

        //加载广告页面
        fileprivate func loadingAdvertisingPages() {
        
            let picUrl = "http://staticlive.douyucdn.cn//upload//signs//201611261752175278.jpg"
            let userDefaultKey = "launchImageKey"
            
            if UserDefaults.standard.string(forKey: userDefaultKey) == "1" {
                let startView: LaunchImageView = LaunchImageView.startAdsWith(imageUrl: picUrl, clickImageAction: {
                    
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: loadAdsNote), object: nil)
                    
                }) as! LaunchImageView
                
                startView.startAnimationTime(time: 5, completionBlock: { (adsView: LaunchImageView) in
                    print("广告执行结束")
                })
                
            }else{
                
                LaunchImageView.downLoadAdsImage(imageUrl: picUrl)
                UserDefaults.standard.set("1", forKey: userDefaultKey)
                _ = UserDefaults.standard.synchronize()
            }
        }

    3.首页数据的加载

    首页中的布局使用 UICollectionView来实现,代码中用到了 MVVM(并没有结合 RAC,RAC 正在学习中)网络请求类,数据的处理全部都在 ViewModel 中完成的

     

    目前完成的就这样,后面会继续写直播页面,更新字在 gitHub上

  • 相关阅读:
    机器学习是什么
    Computer Vision的尴尬---by林达华
    机器学习算法与Python实践之(四)支持向量机(SVM)实现
    机器学习算法与Python实践之(三)支持向量机(SVM)进阶
    Hortonworks HDP Sandbox定制(配置)开机启动服务(组件)
    GCC单独编译host/examples/ tx_waveforms.cpp
    GDAL1.11版本号对SHP文件索引加速測试
    Tcl 简单介绍及特性
    Hardwood Species
    java整合easyui进行的增删改操作
  • 原文地址:https://www.cnblogs.com/ningmengcao-ios/p/6183091.html
Copyright © 2020-2023  润新知