Main.storyboard
ViewController.m
//
// ViewController.m
// 7A13.图层的隐式动画
//
// Created by huan on 16/2/4.
// Copyright © 2016年 huanxi. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
//对象有个强引用,就永远不会被销毁。imageView添加到控制器的view里去了。self.view.subviews 控制器在,所有属性在。
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic,weak) CALayer *layer;//非根层
//为什么用weak,
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
/**
* weak 与 strong 使用
* 只要对象被强引用一次,就无须再次强引用
* self.view.subviews
*/
// [self.view addSubView:imageView]
// self.view.subviews imageView被这个数组强引用一次。imageView跑到这个控制器的数组里去了,控制器在,这个数组在。
// self.view.subviews
//创建一个 非根层
CALayer *layer = [CALayer layer];
//设置内容
layer.contents = (id)[UIImage imageNamed:@"papa"].CGImage;
//设置大小
layer.bounds = CGRectMake(0, 0, 100, 100);
//设置位置
layer.position = CGPointMake(150, 150);
//设置锚点
layer.anchorPoint = CGPointMake(0.5, 0.5);
[self.view.layer addSublayer:layer];
// self.view.layer.sublayers layer被这个数组强引用一次。
self.layer = layer;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//隐式动画
// self.imageView.layer 它是根层
#warning 根层改变属性是没有动画,只有非根层改变属性就有默认的动画
//设置根层的大小
self.imageView.layer.bounds = CGRectMake(0, 0, 150, 150);
//设置非根层的大小
self.layer.bounds = CGRectMake(0, 0, 150, 150);
//想默认动画时间设置长一点
[CATransaction begin];
// [CATransaction setDisableActions:YES];//关闭隐藏动画
[CATransaction setAnimationDuration:5];
//看到transform旋转的动画效果
self.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 1, 0);
// self.layer.bounds = CGRectMake(0, 0, 150, 150);
[CATransaction commit];
}
@end
结果