CALayer的简单使用
原文地址:http://www.raywenderlich.com/2502/calayers-tutorial-for-ios-introduction-to-calayers-tutorial
如果你已经在iPhone上做过开发,你可能对UIView和它的子类-Button,text,slider等,非常熟悉。
但你可能不了解UIView是建立在CALayers之上的,至少我曾经有段时间不知道。了解CALayers是有用的,因为你可以使用它们轻松地去创造一些纯视觉效果,它们对理解使用将在未来教程中讨论的Core Animation也很重要。在CALayers的教程中,你将通过做创造一个层并实验它的效果的简单APP去学习基本的层的使用,在这个过程中,你将学到层是什么,一些能设置的纯属性和如何将图像和自定义内容放入层里。

这个层的教程假设你基本熟悉iPhone编程,如果你是新手,可以从如何创建一个简单的iPhone App开始。让我们开始吧什么是层?层是表现一个在屏幕上的包含可视内容的矩形的简单类。“等一下”,你可能说,“这是UIView的定义”,是这样的,但这儿有个把戏:每一个UIView包含一个用于绘制的根层,你可以使用下面的代码访问这个自动创造的层:(CALayer是UIView的根基)CALayer *myLayer = myView.layer;
CALayer类包含了很多可设置的影响外观显示的属性,例如:层的尺寸和位置层的背景颜色层的内容(图像或者使用Core Graphics绘制的)是否是圆角层在层的边缘应用边框更多内容你可以使用这些属性去创造一些效果,例如你想拿一副图片,放在白色的边框,应用一个阴影效果,使其更为逼真,而不是拿出Photoshop或写一堆Core Graphicsdaima代码,你可以使用层的代码。另外层的属性,多数是可以动画的,例如,你可以开始用圆角图片,点击按钮,有个动画效果,圆角变回直角,使用起来是非常方便简单的。你可以直接使用层类,或者你可以使用一个它的子类,例如CAGradientLayer, CATextLayer, CAShapeLayer,和其他。UIView默认的层类是CALayer类,这个是教程的重点。开始这儿去了解层的使用的最好方法是自己动手,所以启动Xcode,选择File\New Project,选择 iOS\Application\View-Based Application,点"Choose",起名工程"LayerFun",点保存(就是创建个测试Layer的工程)。添加QuzatCore,做下列改动到LayerFunViewController.m:
层和子层就像UIView可以有自视图,CALayers可以也可以用子层,你可以使用下面的代码创建一个新的层:CALayer *sublayer=[CALayer layer];
一旦你拥有一个层,你可以在上面设置任何你想要的属性,但是记住这儿有一个属性你一定要设置:它是frame(或者bounds/ position)。毕竟,层需要去知道它有多大(在什么位置),才能画出自己。当你完成了,你可以把新的层当作子层添加到另一个层中,通过下面的代码:[myLayer addSublayer:sublayer];
好了,现在试着自己添加一个简单的子层到view的层中,添加下面的代码在viewDidLoad函数内之前添加代码的后面:
设置层的图像内容CALayers可以包含更多的内容除了纯颜色,它非常容易包含图片内容,例如:先将一张名为“BattleMapSplashScreen.jpg”的图片包含进项目然后添加以下代码:
圆角半径和图片内容的注意点现在你可能想通过cornerRadius把图片也设置成圆角效果。然而问题超过了咱们之前学的范围,如果你在层上设置了图片内容,图像将仍然画出圆角的边界(该属性起不了作用),你可以通过设置子层的masksToBounds为Yes,但如果你这样做,阴影效果将不会出现因为他们被盖掉了。
我找到一个创造两个层的方法,在外的层是有边框和阴影带颜色的层,里面的层包含圆角图像和设置mask,这样在外的层绘制阴影,在里的层包含图像。
试着使用下面的替换创建子层的代码:
层和自定义绘画内容如果你想使用Core Graphics替代图片绘制自定义的层,也是很容易的。方法是你设置一个类作为层的代理对象,这个类实现名为drawLayer:inContext的方法,里面包含你想绘制内容的Core Graphics代码。让我们试着添加一个新的层,在里面画一个图案,你把层的代理指向view controller的对象,实现drawLayer:inContext的方法去画图案。在你的viewDidLoad添加以下代码建立一个新层:
将来下载源代码点击,