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]; // 提交事务
}
点击屏幕前:
点击屏幕后: