Core Animation - 图层几何学<一>

简介: Core Animation - 图层几何学<一>

我们知道图层也好,视图也罢,我们在使用时,它总是以某一形状出现,这便是图层的几何,这里我来简单说下图层几何这一章的学习过程。


1.布局


在UIView中有frame,bounds和center,而在CALayer中有frame,bounds和position,他们是一一相对的,bounds和center(position)决定了frame,所以frame是一个虚拟的东西,是由后两者算出来的,他们彼此相互依赖,只要改变了bounds或者center(position)中的任何一个值,frame 就会被改变,需要注意的是,对图层进行变换,特别是旋转的时候,frame的值随时都在变化,为四个角做垂直切线形成的新的矩形区域,最初的“frame”则是小于并存在于新的frame里面的。

image.png

image.png

这里借用书中的图来说明frame变化这一现象。


2.锚(mao)点(抛锚的mao)


锚点(anchorPoint)位于图层的中心,默认为{0.5,0.5},图层左上角为{0,0},右下角为{1,1},它的作用是用于保持平衡,我们把锚点比作一个跷跷板的支点,当把锚点向一侧移动时,另一边肯定由于重心偏离支点而向锚点移动的相反的方向倾斜,就是这个原理,当改变图层的锚点时,图层总是向对称的相反的方向移动锚点变化的距离。

image.png

image.png

如图所示,锚点就是这么的神奇。这里有一个时钟表针位置的变化,因为书中的内容相对来说老了点,所以代码在现在的Xcode中运行是有问题的,尤其需要注意这几段代码:

 //定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
//通过已定义的日历对象,获取某个时间点的NSDateComponents表示,并设置需要表示哪些信息
NSDateComponents *dateComponents = [greCalendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:[NSDate date]];
float hoursAngle=(dateComponents.hour%12*1.0/12)*M_PI*2+dateComponents.minute*1.0/60.0*(M_PI/6);
float minutesAngle=(dateComponents.minute*1.0/60)*M_PI*2;
float secondsAngle=(dateComponents.second*1.0/60)*M_PI*2;

旧的方法Xcode会报错,这里博主用了新的方法,同时,不知道什么原因,下面这段代码

CGFloat hoursAngle = (components.hour / 12.0) * M_PI * 2.0;
//calculate hour hand angle //calculate minute hand angle
CGFloat minsAngle = (components.minute / 60.0) * M_PI * 2.0;
//calculate second hand angle
CGFloat secsAngle = (components.second / 60.0) * M_PI * 2.0;

这么写是有问题的,因为components.hour这些参数是%i的类型,%i实际上就是%d了,除以一个整数得到的还是一个整数,时钟是不会动的,所以这里要变成一个浮点数,乘以1.0就可以了,类似的还有在下载时算下载文件大小的ll(大写LL)类型,直接进行运算都是会出问题的,需要乘以1.0,再进行运算,书中的方法还有一个缺陷就是时针一直指向整数小时,所以这里博主利用分针的位置改进了下代码。博主在学习时自己找乐资源做了下,代码下载代码地址:这里写链接内容,大家自己尝试。

目录
相关文章
Core Animation - 图层行为
Core Animation - 图层行为
91 0
Core Animation - 图层行为
Core Animation - 如何来绘制一个火柴人
Core Animation - 如何来绘制一个火柴人
137 0
Core Animation - 如何来绘制一个火柴人
Core Animation - 变换<四>
Core Animation - 变换<四>
94 0
Core Animation - 变换<四>
Core Animation - 变换<一>
Core Animation - 变换<一>
92 0
Core Animation - 变换<一>
Core Animation - 变换<三>
Core Animation - 变换<三>
58 0
Core Animation - 变换<三>
|
iOS开发 MacOS
Core Animation - 图层几何学<二>
Core Animation - 图层几何学<二>
97 0
Core Animation -图层与视图
Core Animation -图层与视图
54 0
Core Animation - 图层时间
Core Animation - 图层时间
87 0
|
iOS开发
Core Animation - 第一次使用图层来创建一个简单的项目
Core Animation - 第一次使用图层来创建一个简单的项目
83 0
Core Animation - 渐变色CAGradientLayer
Core Animation - 渐变色CAGradientLayer
100 0