Thi*_*ilo 8 core-animation ios objective-c-blocks
在iOS中,您可以使用动画块为视图对象设置动画:
[UIView animateWithDuration:1.0 animations:^{
firstView.alpha = 0.0;
secondView.alpha = 1.0;
}];
Run Code Online (Sandbox Code Playgroud)
我们这里有一个代码块,它描述了动画完成后视图属性最终会看到的内容.
这是如何运作的?
我能理解(我认为)如果这是使用一些声明性格式完成的,但从它的外观来看,动画块只是一段常规代码,可能必须执行,结果检查然后有人转码到实际执行动画的低级图形代码.
块是否实际执行(或以某种方式反向工程),如果是,何时?
如果在动画开始之前执行此代码,那么对引用的视图属性的更改如何不立即反映?
如果我将代码放在不改变视图属性的块中,但是做了其他什么,会发生什么?
小智 8
是的,实际调用了块 - 然后它立即更改了视图的属性.UIView的属性设置器负责查看该组是否在动画上下文中使用 - 如果是这样,他们使用CoreAnimation和CoreGraphics计算动画帧等.
如果将非动画代码放入这些块中,则不会发生任何特殊情况 - 该块将立即执行.
在块之前查看等效代码是有益的:
[UIView beginAnimations:@"foo" context:NULL];
[UIView setAnimationDuration:1.0];
firstView.alpha = 0.0;
secondView.alpha = 1.0;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
所以你看,即使在块之前,还要直接设置要更改的属性; 但是,它们不会立即生效(它们是动画的).
它是如何工作的?据推测,当您在视图上设置属性时,它会检查您是否已运行,beginAnimations但如果是commitAnimations,则不会立即生效(而是将其添加到要为该动画制作动画的事物列表中).
所以块版本在预块版本的上下文中非常简单:您可以将其视为在内部beginAnimations和commitAnimations线条中运行动画块.
| 归档时间: |
|
| 查看次数: |
4766 次 |
| 最近记录: |