隐式动画:我的理解是视图移动显示都默认是有过度的,比如:
//简单的添加view至window,(我这边出现的例子是在window上添加一个封装的输入控件)
UIWindow * window = [UIApplication sharedApplication].keyWindow;
self.frame = window.bounds;
[window addSubview:self];
在我这边走到这部分代码,view会有一个从零变大和移动的过度动画,
又或者:
播放器横屏竖屏转换的时候,默认是有一个缩放旋转的过渡动画,
隐式动画的关闭:
//关闭隐式动画
[CATransaction begin];
[CATransaction setDisableActions:YES];
UIWindow * window = [UIApplication sharedApplication].keyWindow;
self.commentBar.frame = window.bounds;
[window addSubview:self.commentBar];
[CATransaction commit];
进一步了解的内容:
需要了解core animation,CALayer,runloop。
个人理解:CALayer即我们能看到的东西,它和看不到的东西,主要是手势交互(或着说事件响应)组成了uiview。修改CALayer的属性都可以但不是一定会生成隐式动画。
runloop:一个有唤醒和睡眠状态,唤醒后不停循环处理事情的管家。。。。
Core Animation动画执行的时间取决于当前事务的设置,动画类型取决于图层行为。
事务:包含一系列属性动画集合的机制,用指定事务去改变可以做动画的图层属性不会立刻发生变化,而是当事务一旦提交的时候开始用一个动画过渡到新值.
事务 通过CATransaction类来做管理,CATransaction可以用加号方法+begin和+commit分别来入栈或者出栈。并且遵循先进后出
任何可以做动画的图层属性都会被添加到栈顶的事务,你可以通过+setAnimationDuration:方法设置当前事务的动画时间,或者通过+animationDuration方法来获取值(默认0.25秒)。
网友评论