版本记录
| 版本号 | 时间 |
|---|---|
| V1.0 | 2017.12.03 |
前言
适当的动画展示可以提高APP的炫酷效果,提高用户忠诚度和粘性,但是在动画集成过程中,不仅可能带来性能问题,还会引起其他交互中的问题,这些都是开发人员在开发过程中比较耗时和需要注意的问题。接下来这几篇我就说一下做各种动画时碰到的各种性能等各种坑和问题。感兴趣的可以看前面几篇。
1. 动画集成中遇到的坑 —— 动画过程中的点击问题(一)
2. 动画集成中遇到的坑 —— UIViewKeyframeAnimationOptionBeginFromCurrentState使用带来的坑(二)
问题描述
UIView动画我们前面讲解了几个坑,这里我要说另外的一个问题,那就是当我们执行UIView动画的时候,这个时候如果我们跳转或者push到别的页面的时候,再pop回来的话,就会发现动画不会继续,而是被完全的取消掉了。
问题展示
为了更好的说明这个问题,下面我们就看一下这个问题的展示。
首先看一下代码。
1. ViewController.m
#import "ViewController.h"
#import "JJJumpVC.h"
@interface ViewController ()
@end
@implementation ViewController
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
imageView.backgroundColor = [UIColor redColor];
[self.view addSubview:imageView];
[UIView animateWithDuration:10 animations:^{
imageView.frame = CGRectMake(350.0, 500.0, 100.0, 100.0);
}];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
JJJumpVC *jumpVC = [[JJJumpVC alloc] init];
[self.navigationController pushViewController:jumpVC animated:YES];
}
@end
2. JJJumpVC.m
#import "JJJumpVC.h"
@interface JJJumpVC ()
@end
@implementation JJJumpVC
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
}
@end
下面我们看一下运行效果:

大家会发现,动画运动到一半的时候,我点击进行跳转,pop回来动画就消失了。
这是什么原因呢?
这里是UIKit框架执行的动画,当我们进行跳转的时候,layer就会
removeAllAnimation,取消了所有的动画,这里我直接是动画一直到结束中间没有停顿,假如我动画形式改变了,比如说在中间停顿了一段时间,那么在开始运动到暂停点之间,如果我们进行跳转再回来,就会发现,他会停止在暂停点,然后消失。
问题解决
这种问题的解决方式就是不用UIKit框架,可以使用SpritKit等框架进行动画,系统就不会在跳转的时候取消layer的动画了。感兴趣的可以参考GitHub - 刀客传奇
后记
未完,待续~~~
