首页 > 手机专区 > 苹果手机 >

iOS如何实现水波纹动画加载效果

来源:互联网 2023-02-21 17:15:15 版权归原作者所有,如有侵权,请联系我们

基于CADisplayLink定时器与正弦函数实现水波纹动画效果的绘制。pVg办公区 - 实用经验教程分享!

工具/原料

  • Xcode

方法/步骤

  • 1

    为实现封装采用自定义View的形式,.m先定义相关用的控制属性以及定时器,如下:pVg办公区 - 实用经验教程分享!

    @property (nonatomic, strong) CADisplayLink *displayLink;pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fAmplitude; /// 振幅pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fCycle; /// 周期pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fHdistance; /// 水平之间偏移pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fVdistance; /// 竖直之间偏移pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fSscale; /// 速度pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fOffsety; /// 波峰所在位置的y坐标pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fWidth; /// 移动的距离,配合速率设置pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fOffsetx; /// 偏移pVg办公区 - 实用经验教程分享!

    @property (nonatomic, assign) CGFloat fUPScale; /// 上升的速度pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 1此文章非法爬取自百度经验
  • 2

    重写视图的- (instancetype)initWithFrame:(CGRect)frame方法进行初始化相关操作,同时实例化定时器,如下:pVg办公区 - 实用经验教程分享!

    self.backgroundColor = [UIColor clearColor];pVg办公区 - 实用经验教程分享!

    _progress = 0;pVg办公区 - 实用经验教程分享!

    self.fAmplitude = self.frame.size.height / 25;pVg办公区 - 实用经验教程分享!

    self.fCycle = 2 * M_PI / (self.frame.size.width * 0.9);pVg办公区 - 实用经验教程分享!

    self.fHdistance = 2 * M_PI / self.fCycle * 0.6;pVg办公区 - 实用经验教程分享!

    self.fVdistance = self.fAmplitude * 0.4;pVg办公区 - 实用经验教程分享!

    self.fWidth = 0.5;pVg办公区 - 实用经验教程分享!

    self.fSscale = 0.4;pVg办公区 - 实用经验教程分享!

    self.fUPScale = 0.1;pVg办公区 - 实用经验教程分享!

    self.fOffsety = (1 - _progress) * (self.frame.size.height 2 * self.fAmplitude);pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkAction)];pVg办公区 - 实用经验教程分享!

    [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 3

    定时器的响应方法是同步界面刷新一直绘制水波纹,self.fOffsety属性用来控制显示,如下:pVg办公区 - 实用经验教程分享!

    - (void)displayLinkActionpVg办公区 - 实用经验教程分享!

    {pVg办公区 - 实用经验教程分享!

    self.fOffsetx = self.fWidth * self.fSscale;pVg办公区 - 实用经验教程分享!

    if (self.fOffsety = 0.01)pVg办公区 - 实用经验教程分享!

    {pVg办公区 - 实用经验教程分享!

    [self.displayLink invalidate];pVg办公区 - 实用经验教程分享!

    self.displayLink = nil;pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    [self setNeedsDisplay];pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 4

    界面刷新会调用pVg办公区 - 实用经验教程分享!

    - (void)drawRect:(CGRect)rectpVg办公区 - 实用经验教程分享!

    方法进行绘制,在此方法里面结合UIBezierPath实现水波纹的实现,如下:pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    - (void)drawRect:(CGRect)rectpVg办公区 - 实用经验教程分享!

    {pVg办公区 - 实用经验教程分享!

    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:rect];pVg办公区 - 实用经验教程分享!

    [[UIColor groupTableViewBackgroundColor] setFill];pVg办公区 - 实用经验教程分享!

    [path fill];pVg办公区 - 实用经验教程分享!

    [path addClip];pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    //绘制两个波形图pVg办公区 - 实用经验教程分享!

    [self drawWaveColor:[UIColor colorWithRed:0/255.0 green:191/255.0 blue:255/255.0 alpha:1.0f] offsetx:0 offsety:0];pVg办公区 - 实用经验教程分享!

    [self drawWaveColor:[UIColor colorWithRed:0/255.0 green:191/255.0 blue:255/255.0 alpha:0.4f] offsetx:self.fHdistance offsety:self.fVdistance];pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 5

    水波纹具体绘制如下,采用正弦函数进行曲线绘制。pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    - (void)drawWaveColor:(UIColor *)color offsetx:(CGFloat)offsetx offsety:(CGFloat)offsetypVg办公区 - 实用经验教程分享!

    {pVg办公区 - 实用经验教程分享!

    CGFloat end_offY = (1 - _progress) * (self.frame.size.height 2 * self.fAmplitude);pVg办公区 - 实用经验教程分享!

    if (self.fOffsety != end_offY) {pVg办公区 - 实用经验教程分享!

    if (end_offY self.fOffsety) {pVg办公区 - 实用经验教程分享!

    self.fOffsety = MAX(self.fOffsety -= (self.fOffsety - end_offY) * self.fUPScale, end_offY);pVg办公区 - 实用经验教程分享!

    }else {pVg办公区 - 实用经验教程分享!

    self.fOffsety = MIN(self.fOffsety = (end_offY - self.fOffsety) * self.fUPScale, end_offY);pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    pVg办公区 - 实用经验教程分享!

    UIBezierPath *wavePath = [UIBezierPath bezierPath];pVg办公区 - 实用经验教程分享!

    for (float next_x = 0.f; next_x = self.frame.size.width; next_x ) {pVg办公区 - 实用经验教程分享!

    CGFloat next_y = self.fAmplitude * sin(self.fCycle * next_x self.fOffsetx offsetx / self.bounds.size.width * 2 * M_PI) self.fOffsety offsety;pVg办公区 - 实用经验教程分享!

    if (next_x == 0) {pVg办公区 - 实用经验教程分享!

    [wavePath moveToPoint:CGPointMake(next_x, next_y - self.fAmplitude)];pVg办公区 - 实用经验教程分享!

    }else {pVg办公区 - 实用经验教程分享!

    [wavePath addLineToPoint:CGPointMake(next_x, next_y - self.fAmplitude)];pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    [wavePath addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height)];pVg办公区 - 实用经验教程分享!

    [wavePath addLineToPoint:CGPointMake(0, self.bounds.size.height)];pVg办公区 - 实用经验教程分享!

    [color set];pVg办公区 - 实用经验教程分享!

    [wavePath fill];pVg办公区 - 实用经验教程分享!

    }pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 6

    自定义View封装实现之后,在需要调用的地方实例化view加载到指定view上即可:pVg办公区 - 实用经验教程分享!

    WaveView *waveView = [[WaveView alloc] initWithFrame:CGRectMake(30, 100, 150, 150)];pVg办公区 - 实用经验教程分享!

    [self.view addSubview:waveView];pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 7

    最终实现效果如下:pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

    iOS如何实现水波纹动画加载效果pVg办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!pVg办公区 - 实用经验教程分享!


    标签: ios苹果实现波纹效果

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号