iOS基本動畫/關鍵幀動畫/利用緩動函數實現物理動畫效果

来源:http://www.cnblogs.com/zhouxihi/archive/2016/10/29/6012135.html
-Advertisement-
Play Games

先說下基本動畫部分 基本動畫部分比較簡單, 但能實現的動畫效果也很局限 使用方法大致為: #1. 創建原始UI或者畫面 #2. 創建CABasicAnimation實例, 並設置keypart/duration/fromValue/toValue #3. 設置動畫最終停留的位置 #4. 將配置好的動 ...


先說下基本動畫部分

基本動畫部分比較簡單, 但能實現的動畫效果也很局限

使用方法大致為:

#1. 創建原始UI或者畫面

#2. 創建CABasicAnimation實例, 並設置keypart/duration/fromValue/toValue

#3. 設置動畫最終停留的位置

#4. 將配置好的動畫添加到layer層中

舉個例子, 比如實現一個圓形從上往下移動, 上代碼:

 1 //設置原始畫面
 2     UIView *showView               = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.f;
 5     showView.layer.backgroundColor = [UIColor redColor].CGColor;
6 [self.view addSubview:showView]; 7 8 //創建基本動畫 9 CABasicAnimation *basicAnimation = [CABasicAnimation animation]; 10 11 //設置屬性 12 basicAnimation.keyPath = @"position"; 13 basicAnimation.duration = 4.0f; 14 basicAnimation.fromValue = [NSValue valueWithCGPoint:showView.center]; 15 basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(50, 300)]; 16 17 //設置動畫結束位置 18 showView.center = CGPointMake(50, 300); 19 20 //添加動畫到layer層 21 [showView.layer addAnimation:basicAnimation forKey:nil];

 

接下來說下關鍵幀動畫

其實跟基本動畫差不多, 只是能設置多個動畫路徑  使用方法也類似, 大致為

#1. 創建原始UI或者畫面

#2. 創建CAKeyframeAnimation實例, 並設置keypart/duration/values 相比基本動畫只能設置開始和結束點, 關鍵幀動畫能添加多個動畫路徑點

#3. 設置動畫最終停留的位置

#4. 將配置好的動畫添加到layer層中

舉個例子, 紅色圓形左右晃動往下墜落 上代碼:

 1 //設置原始畫面
 2     UIView *showView               = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.f;
 5     showView.layer.backgroundColor = [UIColor redColor].CGColor;
 6     
 7     [self.view addSubview:showView];
 8     
 9     //創建關鍵幀動畫
10     CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
11     
12     //設置動畫屬性
13     keyFrameAnimation.keyPath              = @"position";
14     keyFrameAnimation.duration             = 4.0f;
15     
16     keyFrameAnimation.values = @[[NSValue valueWithCGPoint:showView.center],
17                                  [NSValue valueWithCGPoint:CGPointMake(100, 100)],
18                                  [NSValue valueWithCGPoint:CGPointMake(50, 150)],
19                                  [NSValue valueWithCGPoint:CGPointMake(200, 200)]];
20     
21     //設置動畫結束位置
22     showView.center = CGPointMake(200, 200);
23     
24     //添加動畫到layer層
25     [showView.layer addAnimation:keyFrameAnimation forKey:nil];

 

最後是利用緩動函數配合關鍵幀動畫實現比較複雜的物理性動畫

先說說什麼是緩動函數, 就是有高人寫了一個庫可以計算出模擬物理性動畫(比如彈簧效果)所要的路徑

Github地址: https://github.com/YouXianMing/EasingAnimation

具體有哪些動畫效果可看庫中的緩動函數查詢表, 簡單舉個小球落地的效果

上代碼:

 1 //設置原始畫面
 2     UIView *showView               = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.f;
 5     showView.layer.backgroundColor = [UIColor redColor].CGColor;
 6     
 7     [self.view addSubview:showView];
 8     
 9     //創建關鍵幀動畫
10     CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
11     
12     //設置動畫屬性
13     keyFrameAnimation.keyPath              = @"position";
14     keyFrameAnimation.duration             = 4.0f;
15     
    //關鍵處, 在這裡使用的緩動函數計算點路徑 16 keyFrameAnimation.values = [YXEasing calculateFrameFromPoint:showView.center 17 toPoint:CGPointMake(50, 300) 18 func:BounceEaseOut 19 frameCount:4.0f * 30]; 20 21 //設置動畫結束位置 22 showView.center = CGPointMake(50, 300); 23 24 //添加動畫到layer層 25 [showView.layer addAnimation:keyFrameAnimation forKey:nil];

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:時間轉時間戳:javascript獲得時間戳的方法有四種,都是通過實例化時間對象 new Date() 來進一步獲取當前的時間戳 1.var timestamp1 = Date.parse(new Date()); // 結果:1477808630000 不推薦這種辦法,毫秒級別的數值被轉化為0 ...
  • 2016-10-30 13:11:56 引言 最近做項目,發現ajax請求不能在伺服器中直接重定向到登錄頁面。查了些資料發現jquery的ajax請求有人給出了方法。但是webix的ajax請求和jquery的有些區別。這裡模仿jquery的處理方式實現webix的ajax請求session超時跳轉 ...
  • 前言 啦啦啦~博主又來騷擾大家啦~大家是不是感覺上次的Android開發博文有點長呢~主要是因為博主也是小白,在做實驗的過程中查詢了很多很多概念,努力去理解每一個知識點,才完成了最終的實驗。還有就是隨著我們的實驗的進行,代碼量也會越來越多,所以在接下來的博文中會對源碼進行取捨,而不會把全部的實驗代碼 ...
  • 1.三級緩存設計步驟: * 從記憶體中取圖片 * 從本地文件中取圖片 向記憶體中保持一份 * 請求網路圖片,獲取圖片,顯示到控制項上 * 向記憶體存一份 * 向本地文件中存一份 2.網路緩存 線程池類Executors的使用 public static ExecutorService newCachedTh ...
  • 1.關聯庫 compile 'com.android.support:design:23.3.0' 2.佈局寫上TabLayout 3.TabLayout和ViewPager關聯 4.解決TabLayout和ViewPagerIndicator的相容問題 4.1 <activity android: ...
  • 學習完第一行代碼後,繼續學習Android群英傳,希望能堅持下去,好好學習完這本書,並及時做好相關筆記,鞏固相關知識; 一. View的介紹: 1`.我們先來看下view樹結構: 2.樹結構內容: a.viewparent是整棵樹的核心,它統一調度和分配所有的交互管理事件。 b.控制項分為viewgr ...
  • ...
  • 前言 啦啦啦~又要和大家一起學習Android開發啦,博主心裡好激動噠~ 在上篇博文中,我們通過線性佈局和基礎組件的使用,完成了一個簡單的學生課外體育積分電子認證系統的界面,本篇博文,將和大家一起熟悉Button、RadioButton、EditText等基本控制項,探討能夠處理這些控制項的基本事件,學 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...