Calayer简单应用——下载进度条

封装一个UIView内含有一个CAlayer属性(隐式动画,无法修改duration等参数


在iOS中CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”。但是对于UIView的根图层而言属性的修改并不形成动画效果,因为很多情况下根图层更多的充当容器的做用,如果它的属性变动形成动画效果会直接影响子图层。另外,UIView的根图层创建工作完全由iOS负责完成,无法重新创建,但是可以往根图层中添加子图层或移除子图层。

注:要想做隐性动画就在该类中直接创建一个CALayer属性加到self.view.layer的子layer上,通过修改这个子layer的值达到隐性动画的效果.


#import <UIKit/UIKit.h>


@interface ProgressView : UIView

@property (nonatomic,assign)float progress;

@end




****************************************************************************************************************************************************************


#import "ProgressView.h"


@interface ProgressView()

@property (nonatomic,strong)CALayer *progressLayer;

@end

@implementation ProgressView


- (instancetype)initWithFrame:(CGRect)frame{

    

    if (self = [superinitWithFrame:frame]) {

        

        self.progressLayer = [CALayerlayer];

        self.progressLayer.frame =CGRectMake(0,0,0, frame.size.height);

        self.progressLayer.backgroundColor = [UIColorcyanColor].CGColor;

        [self.layeraddSublayer:self.progressLayer];

    }

    

    returnself;

}

重写get方法,外部调用时通过修改这个属性就能达到进度条值改变的效果

- (void)setProgress:(float)progress{

    

    _progress = progress;

    if (progress <=0) {

        

        progress = 0;

    }elseif (progress >=1){

        

        progress = 1.0f;

    }

    

    self.progressLayer.frame =CGRectMake(0,0,self.frame.size.width *progress,3);

}

@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值