官方文档
Transactions are CoreAnimation's mechanism for batching multiple layer-tree operations into atomic updates to the render tree. Every modification to the layer tree requires a transaction to be part of.
CoreAnimation supports two kinds of transactions, "explicit" transactions and "implicit" transactions.
Explicit transactions are where the programmer calls [CATransactionbegin] before modifying the layer tree, and [CATransaction commit] afterwards.
Implicit transactions are created automatically by CoreAnimation when the layer tree is modified by a thread without an active transaction.
They are committed automatically when the thread's run-loop next iterates. In some circumstances (i.e. no run-loop, or the run-loop is blocked) it may be necessary to use explicit transactions to get timely render tree updates.
谷歌翻译:
Transactions是CoreAnimation的用于将多个layer tree操作批量化为渲染树的原子更新的机制。 对layer tree的每个修改都需要事务作为其一部分。
CoreAnimation支持两种事务,“显式”事务和隐式事务。
显式事务是程序员在修改层树之前调用[CATransactionbegin],然后是[CATransaction commit]。
当层树由没有活动事务的线程修改时,CoreAnimation自动创建隐式事务。
它们在线程的运行循环下一次迭代时自动提交。 在一些情况下(即,没有运行循环,或者运行循环被阻塞),可能有必要使用显式事务来及时地呈现树更新。
+(void)begin;
Commit all changes made during the current transaction. Raises an exception if no current transaction exists.
提交当前事务期间进行的所有更改。 如果不存在当前事务,则引发异常。
+(void)commit;
Commits any extant implicit transaction. Will delay the actual commituntil any nested explicit transactions have completed.
提交任何现存的隐式事务。 将延迟实际的commituntil任何嵌套的显式事务已经完成。
+ (void)flush;
Methods to lock and unlock the global lock. Layer methods automatically
obtain this while modifying shared state, but callers may need to lock around multiple operations to ensure consistency. The lock is a recursive spin-lock (i.e shouldn't be held for extended periods).
锁定和解锁全局锁的方法。 Layer方法自动在修改共享状态时获得这一点,但是调用者可能需要锁定多个操作以确保一致性。 锁是一个递归自旋锁(即不应长时间保持)。
+(void)lock;
+(void)unlock;
Accessors for the "animationDuration" per-thread transaction property. Defines the efault duration of animations added to layers. Defaults to 1/4s.
“animationDuration”每个线程事务属性的访问器。 定义添加到图层的动画的默认持续时间。 默认为1 / 4s。
+(CFTimeInterval)animationDuration;
+(void)setAnimationDuration:(CFTimeInterval)dur;
Accessors for the "animationTimingFunction" per-thread transaction property. The default value is nil, when set to a non-nil value any animations added to layers will have this value set as their "timingFunction" property. Added in Mac OS X 10.6.
“animationTimingFunction”每线程事务属性的访问器。 默认值为nil,当设置为非nil值时,添加到图层的任何动画都将此值设置为其“timingFunction”属性。 在Mac OS X 10.6中添加。
+(nullable CAMediaTimingFunction *)animationTimingFunction;
+(void)setAnimationTimingFunction:(nullable CAMediaTimingFunction *)function;
Accessors for the "disableActions" per-thread transaction property.Defines whether or not the layer's -actionForKey: method is used to find an action (aka. implicitanimation) for each layer property change. Defaults to NO, i.e.implicitanimations enabled.
“disableActions”每线程事务属性的访问器。定义图层的-actionForKey:方法是否用于为每个图层属性更改找到一个操作(也称为implicitanimation)。 默认为NO,即启用了隐式动画。
+(BOOL)disableActions;
+(void)setDisableActions:(BOOL)flag;
Accessors for the "completionBlock" per-thread transaction property.Once set to a non-nil value the block is guaranteed to be called (on the main thread) as soon as all animations subsequently added by this transaction group have completed (or been removed). If no animations are added before the current transaction group is committed (or the completion block is set to a different value), the block will be invoked immediately. Added in Mac OS X 10.6.
每个线程事务属性的“completionBlock”访问器。设置为非nil值后,一旦此事务组随后添加的所有动画都已完成(或已删除),块就被保证被调用(在主线程上) )。 如果在提交当前事务组之前没有添加动画(或者完成块被设置为不同的值),则将立即调用该块。 在Mac OS X 10.6中添加。
#if __BLOCKS__
+ (nullable void (^)(void))completionBlock;
+ (void)setCompletionBlock:(nullable void (^)(void))block;
#endif
Associate arbitrary keyed-data with the current transaction (i.e. with the current thread).
Nested transactions have nested data scope, i.e. reading a key searches for the innermost scope that has set it, setting a key always sets it in the innermost scope.
Currently supported transaction properties include:"animationDuration","animationTimingFunction", "completionBlock", "disableActions". See method declarations above for descriptions of each property. Attempting to set a property to a type other than its document type has an undefined result.
将任意键控数据与当前事务(即与当前线程)关联。
嵌套事务具有嵌套数据作用域,即读取一个键,搜索已设置它的最内层作用域,设置键总是将其设置在最内层作用域。
当前支持的事务属性包括:“animationDuration”,“animationTimingFunction”,“completionBlock”,“disableActions”。 有关每个属性的描述,请参阅上面的方法声明。 尝试将属性设置为非文档类型以外的类型具有未定义的结果。
+ (nullable id)valueForKey:(NSString *)key;
+ (void)setValue:(nullable id)anObject forKey:(NSString *)key;
/** Transaction property ids. **/
CA_EXTERN NSString * const kCATransactionAnimationDuration
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransactionDisableActions
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransactionAnimationTimingFunction
CA_AVAILABLE_STARTING (10.6, 3.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransactionCompletionBlock
CA_AVAILABLE_STARTING (10.6, 4.0, 9.0, 2.0);
NS_ASSUME_NONNULL_END