博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
水波动效
阅读量:6246 次
发布时间:2019-06-22

本文共 1569 字,大约阅读时间需要 5 分钟。

应用:一般用于图片装饰,增加层次感。

附上动效图:

实现其实不难,使用遮罩绘制路径即可,这里路径是高中时学过的正弦函数

 y = Asin(wx+b)+c

 - A是指曲线的振幅

 - w好像是相位,决定曲线的周期  2pi/w

 - b,可看做是w(x+b/w),是x的横线偏移量

 - c是y的纵向偏移量

这里附上一张正弦曲线图,搞不懂的同学可以仔细对着图思考一下及各参数的含义

再给大家捋捋

  1.自定义子视图

  2.自定义CAShapeLayer,绘制正弦曲线,赋值为子视图的mask,实现正弦曲线的裁剪效果

  3.绘制多条曲线,相互叠加,实现预期效果

 

会指曲线的代码如下

- (UIBezierPath *)createSinglePath:(CGFloat)offsetx scale:(int)factor {    // y = Asin(w(x+b))+c    /// 振幅A取视图高度 视图宽度刚好为一个周期    横向偏移外部传入,纵向偏移为0    CGFloat width = CGRectGetWidth(self.frame);    CGFloat height = CGRectGetHeight(self.frame);    CGFloat A = height/4;    CGFloat W = M_PI*2/width;    CGFloat offy = A*factor;        UIBezierPath *path = [UIBezierPath new];    // 路径默认剪切i下半部分    [path moveToPoint:CGPointMake(width, 0)];    [path addLineToPoint:CGPointMake(0, 0)];    for (int i = 0; i <= width; i++) {        CGFloat y = A * sinf(W*(i+offsetx))+offy;        [path addLineToPoint:CGPointMake(i, y)];    }    [path closePath];    return path;}

通常是将一个屏幕宽设置为一个周期长,振幅A不要太大,不然不好看,结合CADisplayLink不断偏移x,实现y值上下偏移,空间上给读者一种向左流动的错觉。

{
  CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(refreshWaterWave)];   link.perferredFramePerSeconds = 30;  // 1秒多少帧,苹果默认是1秒60帧,这里设置为30,意味着1秒刷新2次   [link addToRunloop:NSRunloop.mainRunloop forMode:NSRunloopCommonModes]; } - (void)refreshWaterWave {

   static CGFloat offsetX = 0;

   maskLayer.path = [self createSinglePath:offsetX scale:1];

   offsetX += 1;

 }

 

谈下需要注意的几个细节

1.路径叠加的顺序应该是由上到下,并且底下的波纹应当包含上面的波纹

2.多条波纹之间的偏移速度应当相近,最好能周期性变化,这样使得水波好看

 

 

转载于:https://www.cnblogs.com/xiaoerheiwatu/p/9966429.html

你可能感兴趣的文章
Appium移动自动化测试之—基于java的iOS环境搭建
查看>>
NOIP前的刷题记录
查看>>
洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)
查看>>
书签(Bookmarks)
查看>>
Java 信号量 Semaphore 介绍
查看>>
Ubuntu常用软件安装与使用
查看>>
Anroid开发中常用快捷键
查看>>
RecyclerView分隔线定制
查看>>
文本处理(CSS,JS)
查看>>
VBScript 函数
查看>>
shell编程学习
查看>>
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
查看>>
apache源码安装
查看>>
使用TensorFlow遇到的若干问题
查看>>
poj2187
查看>>
Linux下使用 xrandr 命令设置屏幕分辨率
查看>>
Bzoj4766: 文艺计算姬(Matrix-tree/prufer)
查看>>
swift - 移除界面上的所有元素
查看>>
Linux常用函数
查看>>
Oracle dbms_output.put_line长度限制问题
查看>>