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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...