iOS Developer

自定义Loading控件--ZYLoading

2017-10-17  本文已影响153人  Leafly

移动端项目的开发离不开loading控件,通常为了能快速在项目中实现loading效果我们有几个主流的开源库可以选择:
MBProgressHUDSVProgressHUD

然后,为了能让整体项目的loading效果显得更加贴切我就想创建一个loading控件,希望此控件能够比较方便的开启、停止loading效果,而且能易于集成和更换logo。

为了达到这个目的,我创建了一个名为ZYLoading的控件,下面就为大家分享一下我这个控件的原理以及使用方法。

原理分析

此控件的核心思想是利用runtime机制给分类增加成员属性,通过给UIView扩展开启、停止loading的方法,从而实现任何UIView的实例都能方便的开启、停止loading动画

#import "UIView+ZYLoadingView.h"

#import <objc/runtime.h>

static char LoadingViewKey;

@implementation UIView (ZYLoadingView)

#pragma mark - Setter

// 将创建的ZYLoadingView实例关联到分类
- (void)setLoadingView:(ZYLoadingView *)loadingView {
    [self willChangeValueForKey:@"LoadingViewKey"];
    objc_setAssociatedObject(self, &LoadingViewKey, loadingView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:@"LoadingViewKey"];
}

// 获取关联的ZYLoadingView
- (ZYLoadingView *)loadingView {
    return objc_getAssociatedObject(self, &LoadingViewKey);
}

// 开启动画
- (void)beginLoading {
    if (!self.loadingView) {
        self.loadingView = [[ZYLoadingView alloc] initWithFrame:self.bounds];
    }
    
    [self addSubview:self.loadingView];
    
    [self.loadingView startAnimation];
}

// 停止动画
- (void)endLoading {
    if (self.loadingView) {
        [self.loadingView stopAnimation];
    }
}

@end

使用方法

通过一组图片组合成动画
// 通过枚举选择图片组合动画
ZYLoadingConfigInstance.loadingType = ZYLoadingAnimateImages;
// 图片名称
ZYLoadingConfigInstance.animateImageName = @"zy_loading_";
// 图片尺寸
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(37, 13);
// 动画过渡时长
ZYLoadingConfigInstance.duration = 1.f;
通过一张图旋转形成动画
// 通过枚举选择通过旋转图片展现loading动画
ZYLoadingConfigInstance.loadingType = ZYLoadingLoopImage;
// 图片名称
ZYLoadingConfigInstance.loopImage = [UIImage imageNamed:@"loading_circle"];
// 图片尺寸    
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(60, 60);
// 动画过渡时长    
ZYLoadingConfigInstance.duration = 0.25f;
通过一张图片旋转,另一张图片渐隐渐显组合成动画
// 通过枚举选择通过旋转图片展现loading动画    ZYLoadingConfigInstance.loadingType = ZYLoadingLoopImage;
// 图片名称
ZYLoadingConfigInstance.loopImage = [UIImage imageNamed:@"loading_circle"];
// 图片尺寸    
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(60, 60);
// logo图片名称
ZYLoadingConfigInstance.logoImage = [UIImage imageNamed:@"loading_zhangyu"];
// logo图片尺寸
ZYLoadingConfigInstance.logoImageSize = CGSizeMake(40, 40);
// 动画过渡时长
ZYLoadingConfigInstance.duration = 0.25f;
开启、停止动画
// 开启动画
[self.view beginLoading];

// 停止动画
[self.view endLoading];

你也可以直接参考github上的ZYLoading

上一篇 下一篇

猜你喜欢

热点阅读