调整全局动画时长引起的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调整全局动画时长引起的问题相关的知识,希望对你有一定的参考价值。
参考技术A android可以在开发者选项-动画程序时长调整修改动画缩放时间,也可以关闭动画。如图:修改之后会影响Animator,不影响Animation。如果关闭动画,也会影响Lottie动画。
在创建窗口或者动画缩放改变之后,系统会调用ValueAnimator. setDurationScale设置app全局的缩放比例,并把值保存到sDurationScale。
在ValueAnimator.doAnimationFrame方法计算动画,获取经过缩放的时间间隔,如果时间间隔为0,则标记为结束,整个动画也就结束了。立刻触发AnimatorListener的onAnimationStart和onAnimationEnd方法
LottieAnimationView在初始化时会判断系统的缩放是否为0,并设置到LottieDrawable.systemAnimationsEnabled。
在调用playAnimation方法时,如果systemAnimationsEnabled为false则会直接直接调用endAnimation方法。立刻触发AnimatorListener的onAnimationStart和onAnimationEnd方法
反射调用ValueAnimator的静态方法setDurationScale,把sDurationScale设置为1.0f
反射从LottieAnimationView获取lottieDrawable,然后反射设置lottieDrawable.systemAnimationsEnabled为true
修改Settings.Global.ANIMATOR_DURATION_SCALE需要权限android.permission.WRITE_SECURE_SETTINGS,但是这个权限只能系统app申请,所以普通app不能修改这个属性
UITableViewController 滚动引起的cocos2d动画暂停问题的解决
UITableViewController 滚动引起的cocos2d动画暂停问题的解决
之前在使用UITableViewController进行滚动时,cocos2d的动画会暂停,直至滚动完毕才会继续动画。
后来发现可以这样解决,想要了解更多,请查阅NSRunLoop相关知识。
// .h
NSTimer* m_timer;
// .m
- (void)updateCCDirector { [[CCDirector sharedDirector] drawScene]; if (!self.tableView.dragging) { [m_timer invalidate]; m_timer = nil; } } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { if (m_timer == nil) { m_timer = [NSTimer scheduledTimerWithTimeInterval:1.0/60 target:self selector:@selector(updateCCDirector) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:m_timer forMode:NSRunLoopCommonModes]; } }
以上是关于调整全局动画时长引起的问题的主要内容,如果未能解决你的问题,请参考以下文章