iOS 核心动画(1)之基本概念

图层和视图

一、UIView
    iOS中所有的视图都从一个UIView的基类派生出来的。UIView可以处理触摸事件(事件:触摸事件、远程控制事件、运动事件),可以支持Core Graphics绘图,可以做仿射变换(旋转、缩放、移动)。
二、CALayer
    CALayer是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处理用户事件。
三、联系和区别
    1.UIView比CALayer多了用户响应事件,即CALayer更加轻量级。
    2.UIView和CALayer是相互依赖的。UIView依赖于与CALayer提供的内容;CALayer依赖UIView提供的容器来显示绘制的内容。
    3.UIView来自CALayer,高于CALayer(能响应触摸事件),是CALayer高层实现与封装。
    4.CALayer拥有一些UIView没有的功能,比如阴影、圆角、3D变换等。

图层功能

一、寄宿图
    contents:设置图层的显示内容。属性的类型为id,但你真正要赋值的类型应该是CGImageRef,一个指向CGImage结构的指针。UIImage的CGImage属性便是返回CGImageRef类型,但其是一个Core Foundation类型而不是Cocoa对象。要做下面的处理:

contents.jpg

    contentGravity:设置内容的对齐方式,与UIImageView的contentMode功能相似,这里不做复述。
    contentsScale:定义了内容的像素尺寸和视图大小的比例,默认是1.0。该属性是为支持高分辨率屏幕机制。当值为3.0时,表示屏幕一个点需要用三个像素去显示。

contentsScale.jpg

    maskToBounds:默认值是false,表示子图层超出父图层大小的部分依旧正常显示。反之则表示超出父图层部分不被显示。

maskToBounds.jpg

    contentsRect:比contentsGravity灵活得多。可以在图层框里显示指定的部分。默认值是{0,0,1,1}。
    contentsCenter:定义了一个固定的边框和一个在图层上可卡神的区域,默认值是{0,0,1,1}。

contentsCenter.jpg

    doubleSided:设置CALayer背部是否被绘制,默认是NO。

二、几何学
     圆角、图层边框、阴影、透明度不做讨论

    1.图层蒙板
         有时候你希望你展示的内容不是矩形或者圆形,就可以用到mask属性,设置该属性可以自定义内容的轮廓,即保留实心部分。

mask.jpg

    2.拉伸过滤
      我们所要显示的内容的宽高并不是每次都能符合控件的宽高,CALayer提供了两种属性:minificationFilter(缩小图片) 和 magnificationFilter(放大图片)给我们设置。并提供了三种算法供我们根据实际情况选择:kCAFilterLinear、kCAFilterNearest、kCAFilterTrilinear,默认是kCAFilterLinear。

三、变换
 
1.仿射变换
        UIView提供了一个transform属性(CGAffineTransform类型)用于二维空间做旋转(rotation)、缩放(scale)和平移(translation)。图仿射变换1中的方法都是对单元矩阵进行变换,图仿射变换2中的方法是对第一个参数中的CGAffineTransform t进行变换。

仿射变换1.jpg
仿射变换2.jpg

比如imgView放大的是1.2倍,imgView1放大的是1.2*1.2倍。


2.3D变换
    CGAffineTransform类型的前缀是CG,说明其属于Core Graphics框架,Core Graphics框架实际是一个严格意义上的2D绘图API,所以做不了3D空间的变换,但是CATransform3D类型可以。提供的方法和CGAffineTransform的功能一样,只是多出了一个z轴的变化。

3D变换1.jpg
3D变换2.jpg

  但是有一个需要注意,使用上述的方法对控件图层进行变换后,呈现的效果还只是2D视觉。因此我们还需要对图层进行透视投影。这里的操作很简单,对m34进行赋值即可。m34默认值是0,我们可以设置值为 -1.0/d 来应用透视效果,d表示想象中的视角相机和屏幕的距离。

表.jpg

    举个例子

例子.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容