Core Animation之簡單使用CALayer
上篇Core Animation之基礎介紹提到CALayer的重要性,那咱們就試試CALayer如何使用。
1、什么是CALayer
CALayer是個簡單的類,它是用來在屏幕上顯示內容展示的矩形區域。
靠,這是不描述UIView的話嗎?其實他們是有區別的。每個UIView都有一個根CALayer,UIView在這個layer上描繪東西。
那怎么訪問這個layer呢,很簡單:
CALayer *myLayer = myView.layer;
CALayer有這么些屬性,可以設置改變層的顯示:
- 層的大小和位置
- 層的背景顏色
- 層的內容(圖像,core graphics)
- 層的的圓角,半徑
- 層的陰影設置
- 等等....
2、開始
新建項目默認的模版里是 QuartzCore庫的,先添加它,才能使用CALayer。
小試牛刀看看。
設置層的背景顏色,層的設置圓角半徑為20
#import// Uncomment viewDidLoad and add the following lines self.view.layer.backgroundColor = [UIColor orangeColor].CGColor; self.view.layer.cornerRadius = 20.0;
3、層和子層
獲取一個新CALayer的實例
CALayer *sublayer = [CALayer layer];設置layler的屬性,下面分別是
- 設置背景色,
- 陰影的偏差值,
- 陰影的半徑,
- 陰影的顏色,
- 陰影的透明度,
- 子層的freme值。
- 然后把新的層add到view的層里。
CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor purpleColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectMake(30, 30, 128, 192);
[self.view.layer addSublayer:sublayer];效果如下:
4、添加圖片內容和層的圓角
- 主要內容有:
- 新建imagelayer放置圖片
- 設置圓角半徑cornerRadius
- 設置層的內容contents為圖片
- 邊界遮罩masksToBounds
CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor purpleColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;
sublayer.frame = CGRectMake(30, 30, 128, 192);
sublayer.borderColor = [UIColor blackColor].CGColor;
sublayer.borderWidth = 2.0;
sublayer.cornerRadius = 10.0;
[self.view.layer addSublayer:sublayer];
CALayer *imageLayer = [CALayer layer];
imageLayer.frame = sublayer.bounds;
imageLayer.cornerRadius = 10.0;
imageLayer.contents = (id)[UIImage imageNamed:@"snaguosha.png"].CGImage;
imageLayer.masksToBounds = YES;
[sublayer addSublayer:imageLayer];效果: 
有圓角就是好看很多。
5、自定義繪畫內容到圖層
如果不想使用圖片內容,而是想用 Core Graphics繪制內容到層上的話也簡單。
這里主要靠viewController類實現一個drawLayer:inContext方法,并把它設置成layer的代理。代碼如下:
CALayer *customDrawn = [CALayer layer];
customDrawn.delegate = self;
customDrawn.backgroundColor = [UIColor greenColor].CGColor;
customDrawn.frame = CGRectMake(30, 250, 280, 200);
customDrawn.shadowOffset = CGSizeMake(0, 3);
customDrawn.shadowRadius = 5.0;
customDrawn.shadowColor = [UIColor blackColor].CGColor;
customDrawn.shadowOpacity = 0.8;
customDrawn.cornerRadius = 10.0;
customDrawn.borderColor = [UIColor blackColor].CGColor;
customDrawn.borderWidth = 2.0;
customDrawn.masksToBounds = YES;
[self.view.layer addSublayer:customDrawn];在viewController中加入:
static inline double radians (double degrees) { return degrees * M_PI/180; }
void MyDrawColoredPattern (void *info, CGContextRef context) {
CGColorRef dotColor = [UIColor colorWithHue:0 saturation:0 brightness:0.07 alpha:1.0].CGColor;
CGColorRef shadowColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.1].CGColor;
CGContextSetFillColorWithColor(context, dotColor);
CGContextSetShadowWithColor(context, CGSizeMake(0, 1), 1, shadowColor);
CGContextAddArc(context, 3, 3, 4, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 16, 16, 4, 0, radians(360), 0);
CGContextFillPath(context);
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
CGColorRef bgColor = [UIColor colorWithHue:0 saturation:0 brightness:0.15 alpha:1.0].CGColor;
CGContextSetFillColorWithColor(context, bgColor);
CGContextFillRect(context, layer.bounds);
static const CGPatternCallbacks callbacks = { 0, &MyDrawColoredPattern, NULL };
CGContextSaveGState(context);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
CGPatternRef pattern = CGPatternCreate(NULL,
layer.bounds,
CGAffineTransformIdentity,
24,
24,
kCGPatternTilingConstantSpacing,
true,
&callbacks);
CGFloat alpha = 1.0;
CGContextSetFillPattern(context, pattern, &alpha);
CGPatternRelease(pattern);
CGContextFillRect(context, layer.bounds);
CGContextRestoreGState(context);
}這樣,Core Graphics繪制了一個有質地的圖像到 customDrawn層上,這個繪制教程請參考: Core Graphics 101: Patterns 咱們看下這很酷的效果:

這個是不是像mac電腦上按下F12鍵時出來的背景。
層了解了,是不是該看看動畫了:
Core Animation之多種動畫效果
參考:http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!