CALayer的简单使用

168 阅读1分钟
#import "ViewController.h"

#define kLayerWidth 50

@interface ViewController ()

@property (nonatomic, strong) CALayer *movableCircleLayer;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.movableCircleLayer = [CALayer layer];
    // 指定大小
    self.movableCircleLayer.bounds = CGRectMake(0, 0, kLayerWidth, kLayerWidth);
    // 指定中心点
    self.movableCircleLayer.position = self.view.center;
    // 变成圆形
    self.movableCircleLayer.cornerRadius = kLayerWidth / 2;
    // 指定背景色
    self.movableCircleLayer.backgroundColor = [UIColor blueColor].CGColor;
    // 设置阴影
    self.movableCircleLayer.shadowColor = [UIColor grayColor].CGColor;
    self.movableCircleLayer.shadowOffset = CGSizeMake(3, 3);
    self.movableCircleLayer.shadowOpacity = 0.8;
    
    [self.view.layer addSublayer:self.movableCircleLayer];
}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    CGFloat width = kLayerWidth;
    if (self.movableCircleLayer.bounds.size.width <= kLayerWidth) {
        width = kLayerWidth * 2.5;
    }
    // 修改大小
    self.movableCircleLayer.bounds = CGRectMake(0, 0, width, width);
    // 将中心位置放到点击位置
    self.movableCircleLayer.position = [[touches anyObject] locationInView:self.view];
    // 再修改成圆形
    self.movableCircleLayer.cornerRadius = width / 2;
}

@end

// position属性是决定子layer在父layer上的位置

// anchorPoint属性是决定子layer上的哪个点会在position所指定的位置

// anchorPoint从(0,0)到(1,1)为x、y轴的比例。


#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) CALayer *blueLayer;
@property (nonatomic,strong) CALayer *redLayer;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _blueLayer = [CALayer layer];
    _blueLayer.frame = CGRectMake(100, 300, 100, 100);
    [self.view.layer addSublayer:_blueLayer];
    _blueLayer.backgroundColor = [UIColor blueColor].CGColor;
    
    _redLayer = [CALayer layer];
    _redLayer.frame = CGRectMake(0, 0, 50, 50);
    
    [_blueLayer addSublayer:_redLayer];
    _redLayer.backgroundColor = [UIColor redColor].CGColor;
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    _redLayer.anchorPoint = CGPointMake(1, 1); // anchorPoint属性是决定子layer上的哪个点会在position所指定的位置
    _redLayer.position  = CGPointMake(20, 20); // position属性是决定子layer在父layer上的位置
}

@end