CATransaction-API翻译

只是生硬的翻译而已。请-翻-用-。

Introduction

CATransaction(事物)是 CoreAnimation用来将多图层树的操作批量转换成自动更新的渲染树。对图层树的每次修饰都需要事物的参与。CoreAnimation支持两种事物:显性事物和隐性事物

显性事物是:工程师在修饰图层树之前要先调用[CATransaction begin]’方法,完成修饰后调用[CATransaction commit]方法。

隐性事物是:当通过一个线程而不是一个transaction对象对layer树进行修改的时候,CATransaction会自动生成一个隐性事物。当这个线程的进行下一个runloop的时候,隐性事物会被自动提交(commit)上去。
有些特殊情况:(比方说没有runloop,或者runloop被阻塞),你需要使用显性事物来达到即时更新layer的效果。

属性和方法介绍

@interface CATransaction : NSObject

+ (void)begin;

在当前线程开启一个新事物

+ (void)commit;

提交所有的当前事物做的改变。如果当前没有事物存在,将导致异常crash。

+ (void)flush;

提交任何现存的隐性事物。 但是如果有嵌套的显性事物正在提交,这个提交会被延迟直到显性事物提交完毕。

+ (void)lock;

+ (void)unlock;

上面两个方法用来锁住或者解锁全局锁的方法。layer的方法在修改共享状态的时候都会自动调用这两个方法。但是有时候为了保证安全一致,你需要锁住其他操作。锁是递归的自循环锁(不能在延长期保存)

+ (CFTimeInterval)animationDuration;

+ (void)setAnimationDuration:(CFTimeInterval)dur;

上面两个方法为每条线程事物存取动画时间的属性。定义layer默认的动画时间。默认为1/4秒。

+ (nullable CAMediaTimingFunction *)animationTimingFunction;

+(void)setAnimationTimingFunction:(nullable CAMediaTimingFunction *)function;

存取每条线程的事物的动画样式的属性。一般有linear’, easeIn',easeOut’ easeInEaseOut' anddefault’等。默认值为nil。

+ (BOOL)disableActions;

+ (void)setDisableActions:(BOOL)flag;

设置对“让动画失效”事物属性。
定义是否图层的方法actionForKey: 是用来为每个图层的属性改变找到一个动画(即:隐性动画)

+ (nullable void (^)(void))completionBlock;

+ (void)setCompletionBlock:(nullable void (^)(void))block;

设置事物的”completionBlock”属性。
只要给block赋值,当所有的通过此次事物组添加的动画完成(或者被移除后)就会立即调用该block。
如果在当前事务组commit之前没有添加任何动画,或者该block被赋值了一个不同的值,这个block将会被立即调用。

+ (nullable id)valueForKey:(NSString *)key;

+ (void)setValue:(nullable id)anObject forKey:(NSString *)key;

当前线程下事物的任意key-data。
嵌套事物有嵌套的数据范围,读取一个查询最深范围的key,也就是设置一个key处于最深的范围。(并没有看懂原文啥意思,大概还是K-V那套)
目前事物中目前支持设置的属性有:”animationDuration”, “animationTimingFunction”, “completionBlock”,
“disableActions”.
请尝试给属性设置一个类型不同于属性的文件类型有一个未知的结果。
@end


事物的属性 ids

  • CA_EXTERN NSString * const kCATransactionAnimationDuration
  • CA_EXTERN NSString * const kCATransactionDisableActions
  • CA_EXTERN NSString * const kCATransactionAnimationTimingFunction
  • CA_EXTERN NSString * const kCATransactionCompletionBlock