苹果Airpods pro耳机怎么改名字,苹果Airodro耳机怎么改名字?下面请看小编的详细介绍吧!......
iOS应用下载效果如何实现
当我们在应用商店下载应用时桌面会显示当前下载进度的下载动画,来看看进度用代码如何实现。
工具/原料
- Xcode
方法/步骤
创建自定义HWInstallView继承于UIView,声明CGFloat progress属性用来设置进度。
@interface HWInstallView : UIView
@property (nonatomic, assign) CGFloat progress;
@end
重写- (instancetype)initWithFrame:(CGRect)frame方法进行背景设置。
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
使用CGContextRef进行遮罩与环形圆的绘制。
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat xCenter = rect.size.width * 0.5;
CGFloat yCenter = rect.size.height * 0.5;
CGFloat radius = MIN(rect.size.width, rect.size.height) * 0.5 - 10;
//背景遮罩
[[UIColor colorWithRed:0/255.0 green:191/255.0 blue:255/255.0 alpha:1] set];
CGFloat lineW = MAX(rect.size.width, rect.size.height) * 0.5;
CGContextSetLineWidth(context, lineW);
CGContextAddArc(context, xCenter, yCenter, radius lineW * 0.5 5, 0, M_PI * 2, 1);
CGContextStrokePath(context);
//进程圆
CGContextSetLineWidth(context, 1);
CGContextMoveToPoint(context, xCenter, yCenter);
CGContextAddLineToPoint(context, xCenter, 0);
CGFloat endAngle = - M_PI * 0.5 _progress * M_PI * 2 0.001;
CGContextAddArc(context, xCenter, yCenter, radius, - M_PI * 0.5, endAngle, 1);
CGContextFillPath(context);
}
set方法进行进度设置,同时调用setNeedsDisplay方法进行重绘制。
- (void)setProgress:(CGFloat)progress
{
_progress = progress;
[self setNeedsDisplay];
}
实例化HWInstallView进行显示。
HWInstallView *installView = [[HWInstallView alloc] initWithFrame:CGRectMake(30, 300, 150, 150)];
[self.view addSubview:installView];
self.installView = installView;
定义NSTimer定时器,在定时器方法里面设置进度,当进度值大于1时表示加载完成。
- (void)addTimer
{
_timer = [NSTimer scheduledTimerWithTimeInterval:0.2f target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
}
- (void)timerAction
{
_installView.progress = 0.01;
if (_installView.progress >= 1) {
[self removeTimer];
NSLog(@"完成");
}
}
- (void)removeTimer
{
[_timer invalidate];
_timer = nil;
}
最终实现效果如下:
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章