iOS 核心动画的寄宿图.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS 核心动画的寄宿图.pdf

iOS 核⼼动画的寄宿图 寄宿图 图⽚胜过千⾔万语,界⾯抵得上千图⽚ ——Ben Shneiderman 我们在第⼀章 『图层树』中介绍了CALayer类并创 了⼀个简单的有蓝⾊背景的图 层。背景颜⾊还好啦,但是如果它仅仅是展现了⼀个单调的颜⾊未免也太⽆聊了。事 实上CALayer类能够包含⼀张你喜欢的图⽚,这⼀章节我们将来探索CALayer 的寄宿 图 (即图层中包含的图)。 contents属性 CALayer 有⼀个属性叫做contents,这个属性的类型被定义为id ,意味着它可以是 任何类型的对象。在这种情况下,你可以给contents属性赋任何值,你的app仍然能 够编译通过。但是,在实践中,如果你给contents赋的不是CGImage ,那么你得到 的图层将是空⽩的。 contents这个奇怪的表现是由Mac OS的历史原因造成的。它之所以被定义为id类 型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作⽤。如 果你试图在iOS平台上将UIImage的值赋给它,只能得到⼀个空⽩的图层。⼀些初识 Core Animation的iOS开发者可能会对这个感到困惑。 头疼的不仅仅是我们刚才提到的这个问题。事实上,你真正要赋值的类型应该是 CGImageRef ,它是⼀个指向CGImage结构的指针。UIImage有⼀个CGImage属性,它 返回⼀个CGImageRef,如果你想把这个值直接赋值给CALayer 的contents,那你将 会得到⼀个编译错误。因为CGImageRef并不是⼀个真正的Cocoa对象,⽽是⼀个Core oundation类型。 尽管Core oundation类型跟Cocoa对象在运⾏时貌似很像 (被称作toll-free bridging ), 他们并不是类型兼容的,不过你可以通过bridged关键字转换。如果要给图层的寄宿图 赋值,你可以按照以下这个⽅法: layer.contents = (__bridge id)image.CGImage; 如果你没有使⽤ARC (⾃动引⽤计数),你就不需要__bridge这部分。但是,你⼲嘛 不⽤ARC ?! 让我们来继续修改我们在第⼀章新 的⼯程,以便能够展⽰⼀张图⽚⽽不仅仅是⼀个 背景⾊。我们已经⽤代码的⽅式 ⽴⼀个图层,那我们就不需要额外的图层了。那么 我们就直接把layerView的宿主图层的contents属性设置成图⽚。 清单2.1 更新后的代码。 @implementation ViewController - (void)view idLoad { [super view idLoad]; //load an image UIImage *image = [UIImage imageNamed:@Snowman.png]; //add it directly to our view s layer self.layerView .layer.contents = (__bridge id)image.CGImage; } @end 图表2.1 在UIView的宿主图层中显⽰⼀张图⽚ 我们⽤这些简单的代码做了⼀件很有趣的事情:我们利⽤CALayer在⼀个普通的 UIView 中显⽰了⼀张图⽚。这不是⼀个UIImageView ,它不是我们通常⽤来展⽰图⽚ 的⽅法。通过直接操作图层,我们使⽤了⼀些新的函数,使得UIView更加有趣了。 contentGravity 你可能已经注意到了我们的雪⼈看起来有点。。。胖 ==! 我们加载的图⽚并不刚 好是⼀个⽅的,为了适应这个视图,它有⼀点点被拉伸了。在使⽤UIImageView的时 候遇到过同样的问题,解决⽅法就是把contentMode属性设置成更合适的值,像这 样: view .contentMode = UIViewContentModeScaleAspectFit; 这个⽅法基本和我们遇到的情况的解决⽅法已经接近了 (你可以试⼀下 :) ),不过 UIView⼤多数视觉相关的属性⽐如contentMode,对这些属性的操作其实是对对应 图层的操作。 CALayer与contentMode对应的属性叫做contentsGravity,但是它是⼀个 NSString类型,⽽不是像对应的UIKit部分,那⾥⾯的值是枚举。contentsGravity 可选的常量值有以下⼀些: kCAGravityCenter

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档