iOS开发总结之图层CALayer

来源:互联网 发布:影像混搭软件 编辑:程序博客网 时间:2024/06/07 00:09

1.代码

#import "ViewController.h"#import <QuartzCore/QuartzCore.h>@interface ViewController ()@property (weak, nonatomic) IBOutlet UIView *purpleView;@property (weak, nonatomic) IBOutlet UIImageView *iconView;@end@implementation MJViewController- (void)viewDidLoad{    [super viewDidLoad];        [self testView];}- (void)testImageView2{    //普通的view只有二维动画  而图层可以做三维动画    self.iconView.layer.transform = CATransform3DMakeScale(1.5, 0.5, 0);    self.iconView.transform = CGAffineTransformMakeRotation(M_PI_4);        self.iconView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);    //下面的两行代码用kvc可以实现上面那行代码相同的效果    NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)];    [self.iconView.layer setValue:value forKeyPath:@"transform"];    [self.iconView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation"];//二维平面的旋转            self.iconView.layer.transform = CATransform3DMakeScale(0.5, 2, 0);   [self.iconView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 2, 0)] forKeyPath:@"transform"];   [self.iconView.layer setValue:@(0.5) forKeyPath:@"transform.scale.y"];//y方向上缩小0.5倍    // 可以传递哪些key path, 在官方文档搜索 "CATransform3D key paths"    [self.iconView.layer setValue:@(-100) forKeyPath:@"transform.translation.x"];}- (void)testImageView{    // 边框宽度//    self.iconView.layer.borderWidth = 10;//    // 边框颜色//    self.iconView.layer.borderColor = [UIColor greenColor].CGColor;    // 圆角    self.iconView.layer.cornerRadius = 10;    // 超出主层边框范围的内容都剪掉    self.iconView.layer.masksToBounds = YES;        // 阴影颜色    self.iconView.layer.shadowColor = [UIColor blueColor].CGColor;    // 阴影偏差    self.iconView.layer.shadowOffset = CGSizeMake(20, 20);    // 阴影不透明度    self.iconView.layer.shadowOpacity = 0.5;}- (void)testView{    // 边框宽度    self.purpleView.layer.borderWidth = 10;    //    // 边框颜色    self.purpleView.layer.borderColor = [UIColor greenColor].CGColor;    // 圆角    self.purpleView.layer.cornerRadius = 10;        //    self.purpleView.layer.masksToBounds = YES;    // 阴影颜色    self.purpleView.layer.shadowColor = [UIColor blueColor].CGColor;    // 阴影偏差    self.purpleView.layer.shadowOffset = CGSizeMake(20, 20);    // 阴影不透明度    self.purpleView.layer.shadowOpacity = 0.5;}@end

2.效果

storyboard中结构:


1⃣️代码- (void)testView运行的效果


2⃣️代码- (void)testImageView运行效果


3⃣️代码- (void)testImageView2运行效果



3.图层transform之CATransform3D key paths

官方文档搜索:


4.新建图层

- (void)viewDidLoad{    [super viewDidLoad];    // 新建图层//    CALayer *layer = [[CALayer alloc] init];    CALayer *layer = [CALayer layer];    layer.backgroundColor = [UIColor redColor].CGColor;    layer.bounds = CGRectMake(0, 0, 100, 100);    layer.position = CGPointMake(200, 100);    layer.cornerRadius = 10;    layer.masksToBounds = YES;    layer.contents = (id)[UIImage imageNamed:@"lufy"].CGImage;    [self.view.layer addSublayer:layer];}
效果:


5.隐式动画

锚点anchorPoint默认在中间

- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.        CALayer *layer = [CALayer layer];    layer.bounds = CGRectMake(0, 0, 100, 100);    layer.backgroundColor = [UIColor redColor].CGColor;    layer.position = CGPointZero;//    layer.anchorPoint = CGPointZero;    [self.view.layer addSublayer:layer];    self.layer = layer;}

上面代码运行效果:


改变锚点位置

- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.        CALayer *layer = [CALayer layer];    layer.bounds = CGRectMake(0, 0, 100, 100);    layer.backgroundColor = [UIColor redColor].CGColor;    layer.position = CGPointZero;    layer.anchorPoint = CGPointZero;    [self.view.layer addSublayer:layer];    self.layer = layer;}

效果:



隐式动画:没有明显告知开启动画也悄悄的开启动画

- (void)viewDidLoad{    [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.        CALayer *layer = [CALayer layer];    layer.bounds = CGRectMake(0, 0, 100, 100);    layer.backgroundColor = [UIColor redColor].CGColor;    layer.position = CGPointZero;    layer.anchorPoint = CGPointZero;    [self.view.layer addSublayer:layer];    self.layer = layer;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//    self.layer.backgroundColor = [UIColor blueColor].CGColor;//    [CATransaction begin]; // 开启事务//    [CATransaction setDisableActions:YES];    //    self.layer.position = CGPointMake(100, 100);    self.layer.opacity = 0.5;    //    [CATransaction commit]; // 提交事务}
点击屏幕前:

点击屏幕后:




0 0
原创粉丝点击