zoukankan      html  css  js  c++  java
  • iOS 波浪效果的实现

    iOS 波浪效果的实现

    @interface ViewController ()

     

    @property (strong, nonatomic) CADisplayLink *displayLink;

     

    @property (strong, nonatomic) CAShapeLayer *shapeLayer;

     

    @property (strong, nonatomic) UIBezierPath *path;

     

    @property (strong, nonatomic) CAShapeLayer *shapeLayer2;

     

    @property (strong, nonatomic) UIBezierPath *path2;

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        _shapeLayer = [CAShapeLayer layer];

        _shapeLayer.frame = CGRectMake(0, 100, 375, 150);

        [self.view.layer addSublayer:_shapeLayer];

        

        _shapeLayer2 = [CAShapeLayer layer];

        _shapeLayer2.frame = CGRectMake(0, 100, 375, 150);

        [self.view.layer addSublayer:_shapeLayer2];

     

        _shapeLayer.fillColor = [[UIColor yellowColor] colorWithAlphaComponent:0.3].CGColor;

        _shapeLayer2.fillColor = [[UIColor blueColor] colorWithAlphaComponent:0.3].CGColor;

        

        _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawPath)];

        [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

        

    }

     

    - (void)drawPath {

        

        static double i = 0;

        

        CGFloat A = 10.f;//A振幅

        CGFloat k = 0;//y轴偏移

        CGFloat ω = 0.03;//角速度ω变大,则波形在X轴上收缩(波形变紧密);角速度ω变小,则波形在X轴上延展(波形变稀疏)。不等于0

        CGFloat φ = 0 + i;//初相,x=0时的相位;反映在坐标系上则为图像的左右移动。

        //y=Asin(ωx+φ)+k

        

        _path = [UIBezierPath bezierPath];

        _path2 = [UIBezierPath bezierPath];

        

        [_path moveToPoint:CGPointZero];

        [_path2 moveToPoint:CGPointZero];

        for (int i = 0; i < 376; i ++) {

            CGFloat x = i;

            CGFloat y = A * sin(ω*x+φ)+k;

            CGFloat y2 = A * cos(ω*x+φ)+k;

            [_path addLineToPoint:CGPointMake(x, y)];

            [_path2 addLineToPoint:CGPointMake(x, y2)];

        }

        [_path addLineToPoint:CGPointMake(375, -100)];

        [_path addLineToPoint:CGPointMake(0, -100)];

        _path.lineWidth = 1;

        

        _shapeLayer.path = _path.CGPath;

        

        [_path2 addLineToPoint:CGPointMake(375, -100)];

        [_path2 addLineToPoint:CGPointMake(0, -100)];

        _path2.lineWidth = 1;

        

        _shapeLayer2.path = _path2.CGPath;

        

        i += 0.1;

        if (i > M_PI * 2) {

            i = 0;//防止i越界

        }

    }

  • 相关阅读:
    35美元的树莓派电脑 黑客就偷走了NASA的火星数据
    博客样式保留
    某社交网站XSS小计
    c# WhereIf 扩展
    SQL、Linq、lamda表达式 同一功能不同写法
    tomcat org.apache.coyote.http11.HeadersTooLargeException: 尝试将更多数据写入响应标头,而不是缓冲区中有可用空间。 增加连接器上的maxHttpHeaderSize或将更少的数据写入响应头。
    Maven Dependency Scopes
    为什么mysql中不应该使用utf8编码
    springmvc dispacher中的url-pattern的/和/*区别
    在jsp中java代码中警告Cannot resolve method "XX"
  • 原文地址:https://www.cnblogs.com/jukaiit/p/9046802.html
Copyright © 2011-2022 走看看