這篇文章是對上一篇文章 的完善和繼續(xù),建議讀上一篇文章橄仆。
這篇文章主要有以下知識點:
1.動畫的暫停和開始(在點擊的時間點開始)
2.程序退出后臺動畫暫停
3.程序再次進入動畫開始
4.基本動畫的一些總結(jié)
動畫暫停和開始
記錄停止時間(不是停止時間),對上一篇文章的修正
#pragma mark 動畫的暫停和繼續(xù)
- (void)pauseAnimation
{
//1.取出當前的動畫時間點,就是要暫停的時間點
CFTimeInterval pauseTime = [self.myView.layer convertTime:CACurrentMediaTime() fromLayer:nil];
//2.設(shè)置動畫的時間偏移量辽慕,指定時間偏移量的目的是讓動畫定個在時間點
[self.myView.layer setTimeOffset:pauseTime];
//3.將動畫的運行速度設(shè)置為0.默認為 1.0
[self.myView.layer setSpeed:0.0];
}
//恢復(fù)動畫
- (void)resumeAnimation
{
//1.將動畫的時間偏移量作為暫停時間點
CFTimeInterval pauseTime = self.myView.layer.timeOffset;
//2.根據(jù)媒體時間計算出準確的啟動動畫時間贤惯。對之前暫停動畫的時間進行修正老速。
CFTimeInterval beginTime = CACurrentMediaTime() - pauseTime;
//2.5設(shè)置便宜時間點清0
[self.myView.layer setTimeOffset:0];
//3.設(shè)置播放開始時間
[self.myView.layer setBeginTime:beginTime];
//4.設(shè)置速度
[self.myView.layer setSpeed:1.0];
}
注意:
//對于循環(huán)播放的動畫效果啊研,一定要設(shè)置setRemovedOnCompletion為no 裙戏, 否則無法恢復(fù)動畫
在appDelegate中設(shè)置程序退出和進入
#pragma mark - 失去焦點
- (void)applicationWillResignActive:(UIApplication *)application {
}
#pragma mark - 進入后臺
- (void)applicationDidEnterBackground:(UIApplication *)application {
//暫停動畫
//用storyBoard編寫應(yīng)用乘凸,獲取跟視圖控制器的方法。
//(MainViewController *) [application.windows[0] rootViewController];
[self.mainViewController pauseAnimation];
}
#pragma mark - 進入前臺
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
#pragma mark - 獲得焦點
- (void)applicationDidBecomeActive:(UIApplication *)application {
//繼續(xù)動畫
[self.mainViewController resumeAnimation];
}
效果圖:(在上一篇文章的基礎(chǔ)上)
1432219163.gif
記錄暫停和開始的時間累榜,在程序退出后暫停营勤,在程序從后臺激活動畫繼續(xù)。
Core Animation動畫使用的基本總結(jié)
1.通過對CALayer的可動畫屬性進行修改壹罚,實現(xiàn)動畫
2.fromValue和toValue
3.動畫基本使用的步驟:1.實例化 2.定義屬性 3. 添加到圖層
4.注意:對于循環(huán)播放的動畫 如果需要在恢復(fù)焦點后繼續(xù) 葛作, 一定要setRemovedOnCompletion 為 NO.
5.針對平移動畫 需要在動畫結(jié)束后的代理方法中 , 調(diào)整對象的位置猖凛。
感謝那些讓我進步赂蠢,給我動力的人們,一起加油辨泳、一起努力虱岂、一起討論! Powered By Seven