iOS开发概述 - 17.UIView动画和核心动画对比
2015-08-09 19:28
447 查看
1.UIView实现转场动画
使用UIView动画函数实现转场动画——单视图+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
参数说明:
duration:动画的持续时间
view:需要进行转场动画的视图
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
使用UIView动画函数实现转场动画——双视图
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;
参数说明:
duration:动画的持续时间
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
2.核心动画和UIView动画对比
核心动画和UIView的位置变化核心动画都是假象,并没有真正改变图层属性的值,展示和真实的位置不同
UIView动画真正改变了图层属性的位置
什么时候使用核心动画?
只要不需要与用户交互,就可以使用核心动画
如果需要,使用UIView动画
如果改变位置就用UIView的动画
转场动画就用核心动画,因为UIView的转场动画太少
3.示例
UIView动画- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [UIView animateWithDuration:0.25 animations:^{ _redView.layer.position = CGPointMake(250, 500); } completion:^(BOOL finished) { NSLog(@"%@", NSStringFromCGPoint(_redView.layer.position)); }]; }
核心动画
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CABasicAnimation *anim = [CABasicAnimation animation]; // 设置动画属性 anim.keyPath = @"position"; anim.toValue = [NSValue valueWithCGPoint:CGPointMake(250, 500)]; // 设置代理(监听动画结束) anim.delegate = self; // 取消反弹 anim.removedOnCompletion = NO; anim.fillMode = kCAFillModeForwards; // 添加动画 [_redView.layer addAnimation:anim forKey:nil]; } // 当动画完成的时候调用(代理方法) - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { // 注意:核心动画一切都是假象,并不会真实修改layer的属性 NSLog(@"%@", NSStringFromCGPoint(_redView.layer.position)); }
相关文章推荐
- iOS开发--UIButton 设置圆角 边框颜色 点击回调方法
- UIAlertView使用
- UITableView 及其传值
- easy ui 问题
- CSS 3 UI元素状态伪类选择器
- Ultra-QuickSort---poj2299 (归并排序.逆序数.树状数组.离散化)
- POJ 2778 DNA Sequence (AC自动机 + 矩阵快速幂)
- Winform开发全套31个UI组件开源共享
- UE4发报机-Create Event将函数转换为事件绑定
- Winform开发全套31个UI组件开源共享
- 用Nim语言开发windows GUI图形界面程序
- emulator: ERROR: x86 emulation currently requires hardware acceleration!Please ensure Intel HAXM is
- HDOJ 5297 Y sequence 容斥原理
- 在Activity中更改另外一个Activity中的UI
- 详解Android 自定义UI模板设计_由浅入深
- 02_04 JSP内置对象之request
- UIViewController
- UItralEdit文本编辑器下载及破解
- Winform开发全套31个UI组件开源共享
- 【Java多线程】之十一:Java BlockingQueue Example implementing Producer Consumer Problem