6 单图缓存+刷新

2015-11-20  本文已影响0人  DavidFeng_swift

遍历出只有1张图片的

private func cacheWebImage(array: [StatusViewModel]) {
    
         
    // 遍历视图模型数组
    for viewModel in array {
        
        // 目标:只需要缓存单张图片
        let count = viewModel.thumbnailURLs?.count ?? 0
        
        if count != 1 {
            continue
        }
        
        printLog(viewModel.thumbnailURLs)
        
- 闭包回调

在异步 闭包当成参数回调
SDWEB核心下载

   // 2. 入组 - 紧贴着 block/闭包,enter & leave 要配对出现
        dispatch_group_enter(group)
        
        // 使用 SDWebImage 的核心函数下载图片
        SDWebImageManager.sharedManager().downloadImageWithURL(viewModel.thumbnailURLs![0], options: [], progress: nil, completed: { (image, _, _, _, _) in
            
            // 代码执行到此,图片已经缓存完成,不一定有 image
            if image != nil {
                // 将 image 转换成二进制数据
                let data = UIImagePNGRepresentation(image)
                
                dataLength += data?.length ?? 0
            }
            
            // 3. 出组 - block 的最后一句
            dispatch_group_leave(group)
        })
    }
    
    // 4. 调度组监听
    dispatch_group_notify(group, dispatch_get_main_queue()) {
        printLog("缓存图像完成 \(dataLength / 1024) K")
        
        // 执行闭包
        finished()
    }

非尾随闭包
self?.cacheWebImage(arrayM as! [StatusViewModel],finish()->()){}
尾随闭包

       self?.cacheWebImage(arrayM as! [StatusViewModel]) {
                //开始执行闭包内的操作
                self?.statuses += arrayM
                
                // 3. 通知调用方数据加载完成
                subscriber.sendCompleted()
            }

在闭包中发送rac completed 让home控制器的订阅者 刷新表格

面试:sbwebimage缓存的图片名是怎么命名的?
MD5加密的

 // 准备下拉刷新控件 - 刷新控件的高度是 60 点
    refreshControl = HMRefreshControl()
    refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)

beginRefreshing endRefreshing

 /// 加载数据
    func loadData() {
    // beginRefreshing只会播放刷新动画,不会加载数据
    refreshControl?.beginRefreshing()
    
    statusListViewModel.loadStatuses().subscribeNext({ (result) -> Void in
        // TODO:
        }, error: { (error) -> Void in
            // 关闭刷新控件
            self.refreshControl?.endRefreshing()
            
            printLog(error)
            SVProgressHUD.showInfoWithStatus("您的网络不给力")
        }) {
            // 关闭刷新控件
            self.refreshControl?.endRefreshing()
            
            // 刷新表格
            self.tableView.reloadData()
    }
/// 刷新视图,单独负责显示内容&动画
class HMRefreshView: UIView {

/// 负责从 XIB 加载视图
class func refreshView() -> HMRefreshView {
    return NSBundle.mainBundle().loadNibNamed("HMRefreshView", owner: nil, options: nil).last! as! HMRefreshView
}

在refreshController中创建刷新view

    private func setupUI() {
        
    // 隐藏转轮
    tintColor = UIColor.clearColor()
    
    addSubview(refreshView)
    
    // 自动布局 - 从 XIB 加载的视图会保留 XIB 中指定的大小
    refreshView.ff_AlignInner(type: ff_AlignType.CenterCenter, referView: self, size: refreshView.bounds.size)
}

// MARK: - 懒加载控件
private lazy var refreshView = HMRefreshView.refreshView()

思路:tableview cellforrow中 判断是否是最后一个cell
index.row ==statuscount && 没在播放控件动画

上一篇 下一篇

猜你喜欢

热点阅读