宽容他人,放过自己。

CALayer的使用

Posted on By anchoriteFili

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