iOS 绘制波浪

作者: 零粹 | 来源:发表于2019-01-24 16:37 被阅读0次
wave.gif

视频录制是效果看起来挺好的,转成GIF后播放就不流畅了。不过不影响。

先展示一下引用波浪控件的代码吧

//波浪 - 底部
    _waveView = [[WaveView alloc] initWithFrame:CGRectMake(0,    self.view.frame.size.height - 98, self.view.frame.size.width, 98)];
    [_waveView showWaveNum:3 OffsetK:10 AngularSpeed:1.5*M_PI/self.view.frame.size.width Amplitude:20 WaveColor:0x6273FF];
    [self.view addSubview:_waveView];

再来展示一下上面调用的函数方法以及其参数的含义

/**
 绘制波浪

 @param waveNum 波浪个数
 @param offsetK 偏距 k
 @param angularSpeed 角速度 ω
 @param amplitude 振幅
 @param colorHex 波浪颜色
 */
-(void)showWaveNum:(NSInteger)waveNum OffsetK:(CGFloat)offsetK AngularSpeed:(CGFloat)angularSpeed Amplitude:(CGFloat)amplitude WaveColor:(int)colorHex{
    _waveNum = waveNum;
    _offsetK = offsetK;
    _angularSpeed = angularSpeed;
    _amplitude = amplitude;
    
    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawWaveAnimation)];
    [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    
    UIColor *color = UIColorFromRGBA(colorHex, 1.0);
    
    NSMutableArray *mArray = [[NSMutableArray alloc] initWithCapacity:1];
    
    for (int i = 0; i < _waveNum; i ++) {
        
        WaveModel *waveModel = [[WaveModel alloc] init];
        waveModel.waveSpeed = (i+1)/80.0;
        waveModel.waveLayer = [self customWaveLayerWithColor:color opacity:i /5.0 + 0.5];
        [mArray addObject:waveModel];
    }
    self.waveModels = [mArray copy];
}

至于波浪的绘制

- (CAShapeLayer *)customWaveLayerWithColor:(UIColor *)color opacity:(CGFloat)opacity{
    
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.strokeColor = [color CGColor];
    shapeLayer.fillColor = [color CGColor];
    shapeLayer.lineCap = kCALineCapSquare;
    shapeLayer.lineJoin = kCALineJoinBevel;
    shapeLayer.lineWidth = 1.0;
    shapeLayer.opacity = opacity;
    [self.layer addSublayer:shapeLayer];
    return shapeLayer;
}

绘制完图形后还要让其动起来才能在视觉上展示波浪,绘制一个波浪时只能看到波形平移,只有绘制多个波形后,通过不同的移速展现出波浪跌幅。

- (void)drawWaveAnimation {
    
    for (WaveModel *waveModel  in self.waveModels) {
        
        waveModel.offsetX -= waveModel.waveSpeed;
        [self drawWaveLineWithShapeLaye:waveModel.waveLayer initialPhase:50  offsetX:waveModel.offsetX ];
    }
}

- (void)drawWaveLineWithShapeLaye:(CAShapeLayer *)layer  initialPhase:(CGFloat)initialPhase offsetX:(CGFloat)offsetX {
    
    //路径
    UIBezierPath * linePath = [[UIBezierPath alloc] init];
    
    for (int x = 0; x <= self.frame.size.width; x ++) {
        /*
         公式  y=Asin(ωx+φ)+k
         */
        //CGFloat yValue = self.frame.size.height - _amplitude * sin(_angularSpeed * x + initialPhase + offsetX) - _offsetK - _amplitude;
        CGFloat yValue =  _amplitude * sin(_angularSpeed * x + initialPhase + offsetX) + _amplitude;
        CGPoint point = CGPointMake(x, yValue);
        if (x == 0) {
            
            [linePath moveToPoint:point];
            
        }else {
            
            [linePath addLineToPoint:point];
        }
    }
    
    [linePath addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height)];
    [linePath addLineToPoint:CGPointMake(0, self.frame.size.height)];
    [linePath closePath];
    
    //创建layer
    layer.path = linePath.CGPath;
    
    //直接添加导视图上
    
    //    //绘制动画
//    CABasicAnimation *waveAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
//    waveAnimation.repeatCount = HUGE_VALF;
//    waveAnimation.fromValue = @(0);
//    waveAnimation.toValue = @(1);
//    waveAnimation.duration = drawAnimaTime;
//    waveAnimation.fillMode = kCAFillModeForwards;
//    [lineLayer addAnimation:waveAnimation forKey:@"waveAnimation"];
}

demo代码放这里了,需要的小伙伴可以自行下载

https://github.com/ITHanYong/WaveView.git

相关文章

  • iOS 绘制波浪

    视频录制是效果看起来挺好的,转成GIF后播放就不流畅了。不过不影响。 先展示一下引用波浪控件的代码吧 再来展示一下...

  • 绘制波浪正弦曲线

    iOS绘制波浪,具体来说就是结合CAShaperLayer、UIBezierPath进行一个高性能的绘制。前文已经...

  • iOS 波浪型绘制

    我们知道,正弦曲线公式可表示为y=Asin(ωx+φ)+k。 A,振幅,最高和最低的距离 ω,角速度,用于控制周期...

  • iOS 波浪曲线的绘制

    iOS 波浪曲线的绘制 还是先上图: 其实之前就一直想看一下 iOS 关于曲线绘制的相关类容,但由于刚刚步入职场,...

  • 【iOS】绘画波浪篇

    【iOS】绘画波浪篇 【iOS】绘画波浪篇

  • iOS股票K线图

    mark:iOS股票K线图 iOS 股票K线图绘制 iOS 股票K线图绘制 从零开始实现k线图走势图绘制(iOS实战篇)

  • iOS实现波浪效果

    iOS实现波浪效果

  • iOS图形绘制框架 ——UIBezierPath 、Core G

    iOS图形绘制框架 ——UIBezierPath 、Core Graphics 和OpenGL iOS图形绘制框架...

  • android 绘制波浪曲线

    怎样画波浪 通过贝塞尔曲线 怎样让波,浪起来 让波浪水平移动 保持让波浪动起来时,一直正确显示波浪 确保左侧起点始...

  • Canvas中任意波浪线的绘制

    最近接触一个墨水屏的项目,有个需求就是会进行一些标记绘制,类似直线、自由曲线、波浪线等,所以就涉及到波浪线如何绘制...

网友评论

    本文标题:iOS 绘制波浪

    本文链接:https://www.haomeiwen.com/subject/lbhujqtx.html