这篇文章是对上一篇文章 的完善和继续,建议读上一篇文章。
这篇文章主要有以下知识点:
1.动画的暂停和开始(在点击的时间点开始)
2.程序退出后台动画暂停
3.程序再次进入动画开始
4.基本动画的一些总结
动画暂停和开始
记录停止时间(不是停止时间),对上一篇文章的修正
#pragma mark 动画的暂停和继续
- (void)pauseAnimation
{
//1.取出当前的动画时间点,就是要暂停的时间点
CFTimeInterval pauseTime = [self.myView.layer convertTime:CACurrentMediaTime() fromLayer:nil];
//2.设置动画的时间偏移量,指定时间偏移量的目的是让动画定个在时间点
[self.myView.layer setTimeOffset:pauseTime];
//3.将动画的运行速度设置为0.默认为 1.0
[self.myView.layer setSpeed:0.0];
}
//恢复动画
- (void)resumeAnimation
{
//1.将动画的时间偏移量作为暂停时间点
CFTimeInterval pauseTime = self.myView.layer.timeOffset;
//2.根据媒体时间计算出准确的启动动画时间。对之前暂停动画的时间进行修正。
CFTimeInterval beginTime = CACurrentMediaTime() - pauseTime;
//2.5设置便宜时间点清0
[self.myView.layer setTimeOffset:0];
//3.设置播放开始时间
[self.myView.layer setBeginTime:beginTime];
//4.设置速度
[self.myView.layer setSpeed:1.0];
}
注意:
//对于循环播放的动画效果,一定要设置setRemovedOnCompletion为no , 否则无法恢复动画
在appDelegate中设置程序退出和进入
#pragma mark - 失去焦点
- (void)applicationWillResignActive:(UIApplication *)application {
}
#pragma mark - 进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
//暂停动画
//用storyBoard编写应用,获取跟视图控制器的方法。
//(MainViewController *) [application.windows[0] rootViewController];
[self.mainViewController pauseAnimation];
}
#pragma mark - 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
#pragma mark - 获得焦点
- (void)applicationDidBecomeActive:(UIApplication *)application {
//继续动画
[self.mainViewController resumeAnimation];
}
效果图:(在上一篇文章的基础上)
记录暂停和开始的时间,在程序退出后暂停,在程序从后台激活动画继续。
Core Animation动画使用的基本总结
1.通过对CALayer的可动画属性进行修改,实现动画
2.fromValue和toValue
3.动画基本使用的步骤:1.实例化 2.定义属性 3. 添加到图层
4.注意:对于循环播放的动画 如果需要在恢复焦点后继续 , 一定要setRemovedOnCompletion 为 NO.
5.针对平移动画 需要在动画结束后的代理方法中 , 调整对象的位置。
感谢那些让我进步,给我动力的人们,一起加油、一起努力、一起讨论! Powered By Seven