美文网首页iOS开发实用技术runtime程序员
iOS开发造小轮子 | loading view

iOS开发造小轮子 | loading view

作者: Lol刀妹 | 来源:发表于2017-10-26 21:32 被阅读472次

    背景

    看简书APP,发现当网络不是很好,它的banner数据没有加载出来的时候,banner中有一个indicator提示用户正在加载数据。

    想到以后自己可能也会遇到类似需求,所以就简单封装了一下这个小功能。效果如下:

    loading.gif

    思路

    给UIView添加一个indicatorView,需要的时候就展示出来,不要的时候就移除。

    代码

    扩展UIView

    #import "UIView+CQLoading.h"
    #import <objc/runtime.h>
    
    @interface UIView ()
    
    /** loading view */
    @property (nonatomic, strong) UIActivityIndicatorView *cq_loadingView;
    
    @end
    
    @implementation UIView (CQLoading)
    
    static void *cq_loadingViewKey = &cq_loadingViewKey;
    
    - (UIActivityIndicatorView *)cq_loadingView {
        return objc_getAssociatedObject(self, &cq_loadingViewKey);
    }
    
    - (void)setCq_loadingView:(UIActivityIndicatorView *)cq_loadingView {
        objc_setAssociatedObject(self, &cq_loadingViewKey, cq_loadingView, OBJC_ASSOCIATION_RETAIN);
    }
    
    /**
     展示loading(默认灰色)
     */
    - (void)cq_showLoading {
        // 默认展示灰色loading
        [self cq_showLoadingWithColor:[UIColor grayColor]];
    }
    
    /**
     展示指定颜色的loading
    
     @param color loading的颜色
     */
    - (void)cq_showLoadingWithColor:(UIColor *)color {
        if (self.cq_loadingView) {
            [self.cq_loadingView removeFromSuperview];
            self.cq_loadingView = nil;
        }
        self.cq_loadingView = [[UIActivityIndicatorView alloc] initWithFrame:self.bounds];
        [self addSubview:self.cq_loadingView];
        self.cq_loadingView.color = color;
        [self.cq_loadingView startAnimating];
        self.cq_loadingView.userInteractionEnabled = NO;
    }
    
    /**
     移除loading
     */
    - (void)cq_removeLoading {
        if (self.cq_loadingView) {
            [self.cq_loadingView removeFromSuperview];
            self.cq_loadingView = nil;
        }
    }
    
    @end
    

    使用

    [imageView cq_showLoading];   // 展示loading
    [imageView cq_removeLoading]; // 移除loading
    

    一个小demo

    相关文章

      网友评论

      • CepheusSun:快师傅爱上runtime了
        Lol刀妹:@CepheusSun :unamused:
        CepheusSun:@Mikebanana 哈哈哈,快师傅教会了我很多知识哦
        Mikebanana:死忠粉 可以的
      • 名扬丶四海:sdwebimage自带这个功能吧
        Lol刀妹:@名扬丶四海 get了,正好可以对比学习下SD的代码😀
        名扬丶四海:@无夜之星辰 [self sd_setShowActivityIndicatorView:YES]; // 是否显示指示器
        [self sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
        Lol刀妹:哪个方法?我怎么没印象:flushed:

      本文标题:iOS开发造小轮子 | loading view

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