// 通过CALayer的代理方法进行绘图,可用于社交app的头像应用
// CALayerGraphicsViewController.m
// CALayerGraphics
//
// Created by xiaoyao on 15/3/6.
// Copyright (c) 2015年 lijien. All rights reserved.
//
#import "CALayerGraphicsViewController.h"
#define PHOTO_HEIGHT 150
@interface CALayerGraphicsViewController ()
@end
@implementation CALayerGraphicsViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self myCalyerGraphics];
}
- (void)myCalyerGraphics {
CALayer *layer = [[CALayer alloc] init];
layer.bounds = CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT);
layer.position = CGPointMake(160, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
layer.cornerRadius = PHOTO_HEIGHT / 2;
layer.borderColor = [UIColor whiteColor].CGColor;
layer.borderWidth = 2;
layer.masksToBounds = YES;
layer.delegate = self;
[self.view.layer addSublayer:layer];
// 必须调用,否则图层上绘制的内容无法显示,并且图层的代理方法也不会调用
[layer setNeedsDisplay];
}
#pragma mark - calayerDlelegte
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGContextSaveGState(ctx);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -PHOTO_HEIGHT);
UIImage *image = [UIImage imageNamed:@"photo.png"];
CGContextDrawImage(ctx, CGRectMake(0, 0, PHOTO_HEIGHT, PHOTO_HEIGHT), image.CGImage);
CGContextRestoreGState(ctx);
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CALayer *calayer = self.view.layer.sublayers[0];
CGFloat width = calayer.bounds.size.width;
if (width == PHOTO_HEIGHT) {
width = PHOTO_HEIGHT * 2;
} else {
width = PHOTO_HEIGHT;
}
calayer.bounds = CGRectMake(0, 0, width, width);
calayer.position = [touch locationInView:self.view];
calayer.cornerRadius = width / 2;
}
@end