CATransaction(参考其他博客敲)

#import "ViewController.h"

@interface ViewController ()
@property(nonatomic,strong)CALayer *calayer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *btn =[UIButton buttonWithType:UIButtonTypeSystem];
    btn.frame=CGRectMake(100, 100, 100, 50) ;
    btn.tag=1;
    [btn setTitle:@"隐式事务按钮" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [btn setTintColor:[UIColor blackColor]];
    [btn addTarget:self action:@selector(btnclick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    
    UIButton *btn1 =[UIButton buttonWithType:UIButtonTypeSystem];
    btn1.frame=CGRectMake(200, 100, 100, 50) ;
    btn1.tag=2;
    [btn1 setTitle:@"显式事务按钮" forState:UIControlStateNormal];
    [btn1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [btn1 setTintColor:[UIColor blackColor]];
    [btn1 addTarget:self action:@selector(btnclick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn1];
   
//    CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务.
//    区分隐式动画和隐式事务:隐式动画通过隐式事务实现动画 。修改Calayer的属性属于隐式事务
//    区分显式动画和显式事务:显式动画有多种实现方式,显式事务是一种实现显式动画的方式。
     //隐式事务
    self.calayer=[CALayer layer];
    self.calayer.bounds=CGRectMake(150, 150, 100, 100);
    self.calayer.position=CGPointMake(100, 200);
    self.calayer.backgroundColor=[UIColor redColor].CGColor;
    self.calayer.borderColor = [UIColor blackColor].CGColor;
    self.calayer.opacity = 1.0f;
    [self.view.layer addSublayer:self.calayer];
    [super viewDidLoad];

}
-(void)btnclick:(id)sender
{
    UIButton *btn=(UIButton *)sender;
    if (btn.tag==1) {
        [CATransaction setDisableActions:YES];
        self.calayer.cornerRadius = (self.calayer.cornerRadius == 0.0f) ? 30.0f : 0.0f;
        self.calayer.opacity = (self.calayer.opacity == 1.0f) ? 0.5f : 1.0f;
    }
    else
    {
        //事务嵌套
        [CATransaction begin];
        [CATransaction begin];
        [CATransaction setDisableActions:YES];
        self.calayer.opacity = (self.calayer.opacity == 1.0f) ? 0.5f : 1.0f;
        [CATransaction commit];
        //上面的动画并不会立即执行,需要等最外层的commit
        [NSThread sleepForTimeInterval:3];
        //显式事务默认开启动画效果,kCFBooleanTrue关闭
        [CATransaction setValue:(id)kCFBooleanFalse
                         forKey:kCATransactionDisableActions];
        //动画执行时间
        [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
        //[CATransaction setAnimationDuration:[NSNumber numberWithFloat:5.0f]];
        self.calayer.cornerRadius = (self.calayer.cornerRadius == 0.0f) ? 30.0f : 0.0f;
        [CATransaction commit];
        
    }
    
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值