项目中为了显示设备正在运行特用一个旋转行走渐变的圈表示,如下图外圈的小圆点:(里圈进度条已在前面文章中总结原理及代码)
iOS的绘图一般是在CALayer上面绘制,所以上图的所有圈圈都是在layer上。
1.现在View上创建一个小圆圈,并给这个圆圈添加Animation和3D变换
2.然后再用CAReplicatorLayer这个类复制多个同样的圆,并设置圆的位置和3D变换
这里特别的记录一下CATransform3D和CAReplicatorLayer的作用和使用:
2D是基于平面位置的坐标,只有x,y轴,这里的3D就多加了一个z轴,在2D或3D空间中,对一个物体执行平移、缩放或旋转这些操作时需要使用矩阵运算。
CATransform3D:是一个4维矩阵如下:
structCATransform3D
{
CGFloatm11, m12, m13, m14;
CGFloatm21, m22, m23, m24;
CGFloatm31, m32, m33, m34;
CGFloatm41, m42, m43, m44;
};
CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz):是沿着x,y,z的位置上的平移。
CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz):是x,y,z的缩放倍数。
CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z):是图形的旋转效果。
angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180。
x:向X轴方向旋转。值范围-1 --- 1之间
y:向Y轴方向旋转。值范围-1 --- 1之间
z:向Z轴方向旋转。值范围-1 --- 1之间
CAReplicatorLayer:
CAReplicatorLayer可以高效生成许多相似的图层。它会绘制一个或多个图层的子图层,并在每个复制体上应用不同的变换。
如下函数,就是生成count个具有transform变换的copyLayer
有不足处和不准确地方欢迎改正,觉得有用或者喜欢记得点颗❤️哦。
网友评论