简体   繁体   中英

How does [UIView beginAnimations] work?

I was wondering how animations work in Cocoa Touch. For example:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];

view1.alpha = 1.0;
view2.frame.origin.x += 100;

[UIView commitAnimations];

How does UIView tracks the changes to the properties of the two views?

I suspect that KVO is used, but does it really observe the changes to every views between the beginAnimations and commitAnimations calls?

Any insight would be appreciated!

A simplified explanation:

All animations for all views are handled on a single stack, beginAnimations:context: will push a new active CAAnimationGroup on the stack, and commitAnimations will pop the current active animation group.

If there is an active animation group on the stack, then all setters for animatable properties will create CAAnimation subclass instances to handle that property and add then to the active animation group.

When the last animation is popped, it is replayed.

I believe it is just a wrapper over the old CoreAnimation calls. Look into the CoreGraphics API, you can see that there are multiple keys that you must set into a dictionary, while providing beginning and ending values for these keys.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM