iOS进度条,加载,安装动画的简单实现

  

首先看一下效果图:

  

 iOS进度条,加载,安装动画的简单实现

  

下面贴上代码:

  

控制器ViewController:

        # import & lt; UIKit/UIKit.h>   @ interface ViewController: ui   @end/* * * - - - - - - - - - - - - - - - - - -分割线- - - - - - - - - - - - - - - - - - * * */#进口“ViewController.h”   #进口“HWWaveView.h”   #进口“HWCircleView.h”   #进口“HWProgressView.h”   #进口“HWInstallView.h”   @ interface ViewController ()   @ property(原子、强)NSTimer *定时器;   @ property(原子、弱)HWWaveView * waveView;   @ property(原子、弱)HWCircleView * circleView;   @ property(原子、弱)HWProgressView * progressView;   @ property(原子、弱)HWInstallView * installView;   @end   @ implementation ViewController   - (void) viewDidLoad {   (超级viewDidLoad);//创建控件   (自我creatControl);//添加定时器   (自我addTimer);   }   - (void) creatControl   {//波浪   HWWaveView * waveView=[[HWWaveView alloc] initWithFrame: CGRectMake (100、150、150)];   (自我。视图addSubview waveView):;   自我。waveView=waveView;//圆圈   HWCircleView * circleView=[[HWCircleView alloc] initWithFrame: CGRectMake (220, 100, 150, 150)];   (自我。视图addSubview circleView):;   自我。circleView=circleView;//进度条   HWProgressView * progressView=[[HWProgressView alloc] initWithFrame: CGRectMake (30、365、150、20)];   (自我。视图addSubview progressView):;   自我。progressView=progressView;//加载安装效果   HWInstallView * installView=[[HWInstallView alloc] initWithFrame: CGRectMake (220, 300, 150, 150)];   (自我。视图addSubview installView):;   自我。installView=installView;   }   - (void) addTimer   {   _timer=[NSTimer scheduledTimerWithTimeInterval: 0.2 f目标:自我选择器:@ selector (timerAction)用户信息:nil重复:是的);   [[NSRunLoop mainRunLoop] addTimer: _timer forMode: NSRunLoopCommonModes);   }   - (void) timerAction   {   _waveView。进步+=0.01;   _circleView。进步+=0.01;   _progressView。进步+=0.01;   _installView。进步+=0.01;   如果(_waveView。进步祝辞=1){   (自我removeTimer);   NSLog(@”完成”);   }   }   - (void) removeTimer   {   [_timer无效);   _timer=零;   }   @end   波浪HWWaveView:   [objc]视图在普通副本代码上查看代码片派生到我的代码片   # import & lt; UIKit/UIKit.h>   @ interface HWWaveView: UIView   @ property(原子,分配)CGFloat进步;   @end/* * * - - - - - - - - - - - - - - - - - -分割线- - - - - - - - - - - - - - - - - - * * */#进口“HWWaveView.h”   #定义KHWWaveFillColor(用户界面颜色groupTableViewBackgroundColor]//填充颜色   #定义KHWWaveTopColor(用户界面颜色colorWithRed: 0/255.0格林:191/255.0蓝色:255/255.0α:1.0 f]//前面波浪颜色   #定义KHWWaveBottomColor(用户界面颜色colorWithRed: 0/255.0格林:191/255.0蓝色:255/255.0α:0.4 f]//后面波浪颜色   @ interface HWWaveView ()   @ property(原子、强)的人来说CADisplayLink *显示连接;   @ property(原子,分配)是CGFloat wave_amplitude;//振幅一个(y=asin (wx +φ)+ k)   @ property(原子,分配)是CGFloat wave_cycle;//周期w   @ property(原子,分配)是CGFloat wave_h_distance;//两个波水平之间偏移   @ property(原子,分配)是CGFloat wave_v_distance;//两个波竖直之间偏移   @ property(原子,分配)是CGFloat wave_scale;//水波速率   @ property(原子,分配)是CGFloat wave_offsety;//波峰所在位置的y坐标   @ property(原子,分配)是CGFloat wave_move_width;//移动的距离,配合速率设置   @ property(原子,分配)是CGFloat wave_offsetx;//偏移   @ property(原子,分配)是CGFloat offsety_scale;//上升的速度   @end   @ implementation HWWaveView   - (instancetype) initWithFrame:(CGRect中)框架   {   如果(自我=(超级initWithFrame:帧)){   自我。写成backgroundColor=[用户界面颜色clearColor];//初始化信息   (自我initInfo);   }   回归自我;   }   - (void) initInfo   {//进度   _progress=0;//振幅   _wave_amplitude=self.frame.size.height/25;//周期   _wave_cycle=22 * M_PI/(self.frame.size.width * 0.9);//两个波水平之间偏移   _wave_h_distance=22 * M_PI/_wave_cycle * 0.6;//两个波竖直之间偏移   _wave_v_distance=_wave_amplitude * 0.4;//移动的距离,配合速率设置   _wave_move_width=0.5;//水波速率   _wave_scale=0.4;//上升的速度   _offsety_scale=0.1;//波峰所在位置的y坐标,刚开始的时候_wave_offsety是最大值   _wave_offsety=(1 - _progress) * (self.frame.size.height + 22 * _wave_amplitude);   (自我addDisplayLinkAction);   }   - (void) addDisplayLinkAction   {   _displayLink=[CADisplayLink displayLinkWithTarget:自我选择器:@ selector (displayLinkAction)];   [_displayLink addToRunLoop:(NSRunLoop mainRunLoop] forMode: NSRunLoopCommonModes);   }   - (void) displayLinkAction   {   _wave_offsetx +=_wave_move_width * _wave_scale;//完成   如果(_wave_offsety & lt;=0.01)[自我removeDisplayLinkAction];   (自我setNeedsDisplay);   }   - (void) removeDisplayLinkAction   {   [_displayLink无效);   _displayLink=零;   }   - (void)绘制矩形:矩形(CGRect中)   {   UIBezierPath *路径=[UIBezierPath bezierPathWithOvalInRect矩形):;   [KHWWaveFillColor setFill];   (路径填写);   (路径addClip);//绘制两个波形图   【自我drawWaveColor: KHWWaveTopColor offsetx: 0 offsety: 0];   【自我drawWaveColor: KHWWaveBottomColor offsetx: _wave_h_distance offsety: _wave_v_distance);   }   - (void) drawWaveColor:(用户界面颜色*)颜色offsetx: (CGFloat) offsetx offsety: offsety (CGFloat)   {//波浪动画,进度的实际操作范围是,多加上两个振幅的高度,到达设置进度的位置y   CGFloat end_offY=(1 - _progress) * (self.frame.size.height + 22 * _wave_amplitude);   如果(_wave_offsety !=end_offY) {   如果(end_offY & lt;_wave_offsety) {   _wave_offsety=MAX (_wave_offsety -=(_wave_offsety - end_offY) * _offsety_scale end_offY);   其他}{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

iOS进度条,加载,安装动画的简单实现