CALayer的使用
CALayer的使用.zip
CATransform3DMakeRotation 旋转,翻转
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *customView;
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (nonatomic,assign) float Z; //Y方向
@end
double radians(float degrees) {
return ( degrees * 3.14159265 ) / 180.0;
}
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.Z = -2;
#pragma mark view部分处理
//设置边框宽度为20
self.customView.layer.borderWidth = 20;
//设置边框颜色
self.customView.layer.borderColor = [UIColor greenColor].CGColor;
//设置layer的圆角
self.customView.layer.cornerRadius = 20;
//在view的图层上添加一个image,contents标示接受内容
// self.customView.layer.contents = (id)[UIImage imageNamed:@"参与投票3x"].CGImage;
//设置超过子图层的部分裁减掉 第一种直接在view上剪掉,第二种是在layer上剪掉,建议用第二种
// self.customView.clipsToBounds = YES;
// self.customView.layer.masksToBounds = YES;
#pragma mark 设置阴影
/**
注释:如果设置了超过主图层的部分减掉,则设置阴影不会有显示效果,
即注释:self.customView.layer.masksToBounds = YES;存在时无阴影效果
*/
//设置阴影的颜色
self.customView.layer.shadowColor = [UIColor blackColor].CGColor;
//设置阴影的偏移量,如果为整数,则代表为往右边偏移
self.customView.layer.shadowOffset = CGSizeMake(30, 5);
//设置阴影的透明度(0-1之间,0表示完全透明)
self.customView.layer.shadowOpacity = 0.6;
#pragma mark 图片的处理
#pragma mark 只要继承自uiview的都有layer属性,下面以图片为例进行说明
//设置图片的layer的边框宽度和颜色
self.iconView.layer.borderColor = [UIColor brownColor].CGColor;
self.iconView.layer.borderWidth = 5;
//设置layer的圆角
self.iconView.layer.cornerRadius = 20;
//设置超过子图层的部分裁减掉
self.iconView.layer.masksToBounds = YES;
//设置bounds属性,在设置时需要去掉storyboard中的自动布局属性(关闭stroyboard中的use auto layout)
}
#pragma mark uitouch中所有的代理方法都是直接可以用的,这个很好
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
#pragma mark 设置图片的变形属性(transform)
#pragma mark 透过uiview设置(2D效果) 数字为证右移下移 数字为负上移左移,两个数值一个x一个y
// self.iconView.transform = CGAffineTransformMakeTranslation(-50, 100);
#pragma mark 通过layer来设置(3D效果,x,y,z三个方向)
//transform本身有3D和2D属性 @property CATransform3D transform;
// self.iconView.layer.transform = CATransform3DMakeTranslation(30, 20, 300 );
#pragma mark 通过KVC来设置
// NSValue *v = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(30, 20, 10)];
// [self.iconView.layer setValue:v forKey:@"transform"];
//如果只需要设置在某一个方向上的移动,可以参考下面的代码
//在x的方向上向左移动100
// [self.iconView.layer setValue:@(-100) forKeyPath:@"transform.translation.x"];
// 创建NSTimer_self.timer
NSTimer *timer = [NSTimer timerWithTimeInterval:0.05 target:self selector:@selector(action) userInfo:nil repeats:YES];
// 将创建的self.timer加入到循环中
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
// 让循环跑起来
[[NSRunLoop currentRunLoop] run];
}
#pragma mark 定时器运转
- (void)action {
self.Z += 4;
#pragma mark 旋转一个弧度 CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z) angle角度
/**
x为1的时候以x为轴转,同理y为1的时候以y为轴,z为1的时候以z为轴
*/
self.customView.layer.transform = CATransform3DMakeRotation(radians(self.Z), 1.0, 1.0, 1.0);
self.iconView.layer.transform = CATransform3DMakeRotation(radians(self.Z), 1.0, 0.0, 0.0);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end