TIANKONGHAIHUO

导航

图层的隐藏动画

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

结果

posted on 2016-02-15 19:22  日月行程  阅读(120)  评论(0编辑  收藏  举报