iOS开发总结之图层CALayer

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值