iOS動畫-從UIView到Core Animation

来源:https://www.cnblogs.com/lfyDragon/archive/2018/04/11/8796518.html
-Advertisement-
Play Games

首先,介紹一下UIView相關的動畫。 動畫屬性設置: 舉2個例子: 2. UIView Block動畫 這3個動畫比較簡單,不再多做敘述。 Spring動畫ios7.0以後新增了Spring動畫(IOS系統動畫大部分採用Spring Animation, 適用所有可被添加動畫效果的屬性) Keyf ...


首先,介紹一下UIView相關的動畫。

  1. UIView普通動畫:
[UIView beginAnimations: context:];
 [UIView commitAnimations];

動畫屬性設置:

 1     //動畫持續時間
 2     [UIView setAnimationDuration:(NSTimeInterval)];
 3     //動畫的代理對象
 4     [UIView setAnimationDelegate:(nullable id)];
 5     //設置動畫將開始時代理對象執行的SEL
 6     [UIView setAnimationWillStartSelector:(nullable SEL)];
 7     //設置動畫延遲執行的時間
 8     [UIView setAnimationDelay:(NSTimeInterval)];
 9     //設置動畫的重覆次數
10     [UIView setAnimationRepeatCount:(float)];
11     //設置動畫的曲線
12     /*
13      UIViewAnimationCurve的枚舉值:
14      UIViewAnimationCurveEaseInOut,         // 慢進慢出(預設值)
15      UIViewAnimationCurveEaseIn,            // 慢進
16      UIViewAnimationCurveEaseOut,           // 慢出
17      UIViewAnimationCurveLinear             // 勻速
18      */
19     [UIView setAnimationCurve:(UIViewAnimationCurve)];
20     //設置是否從當前狀態開始播放動畫
21     /*假設上一個動畫正在播放,且尚未播放完畢,我們將要進行一個新的動畫:
22      當為YES時:動畫將從上一個動畫所在的狀態開始播放
23      當為NO時:動畫將從上一個動畫所指定的最終狀態開始播放(此時上一個動畫馬上結束)*/
24     [UIView setAnimationBeginsFromCurrentState:YES];
25     //設置動畫是否繼續執行相反的動畫
26     [UIView setAnimationRepeatAutoreverses:(BOOL)];
27     //是否禁用動畫效果(對象屬性依然會被改變,只是沒有動畫效果)
28     [UIView setAnimationsEnabled:(BOOL)];
29     //設置視圖的過渡效果
30     /* 第一個參數:UIViewAnimationTransition的枚舉值如下
31      UIViewAnimationTransitionNone,              //不使用動畫
32      UIViewAnimationTransitionFlipFromLeft,      //從左向右旋轉翻頁
33      UIViewAnimationTransitionFlipFromRight,     //從右向左旋轉翻頁
34      UIViewAnimationTransitionCurlUp,            //從下往上卷曲翻頁
35      UIViewAnimationTransitionCurlDown,          //從上往下卷曲翻頁
36      第二個參數:需要過渡效果的View
37      第三個參數:是否使用視圖緩存,YES:視圖在開始和結束時渲染一次;NO:視圖在每一幀都渲染*/
38     [UIView setAnimationTransition:(UIViewAnimationTransition) forView:(nonnull UIView *) cache:(BOOL)];

舉2個例子:

 1     [UIView beginAnimations:@"xxx" context:nil];
 2     [UIView setAnimationDuration:5];
 3     [UIView setAnimationRepeatCount:MAXFLOAT];
 4     [UIView setAnimationDelegate:self];
 5     [UIView setAnimationDelay:3];
 6     [UIView setAnimationWillStartSelector:@selector(animationWillStart)];
 7     [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
 8     [UIView setAnimationRepeatAutoreverses:YES];
 9     
10     self.iView.frame = CGRectMake(200, 400, 100, 100);
11     
12     [UIView commitAnimations];
 1     [UIView beginAnimations:@"xxx" context:nil];
 2     [UIView setAnimationDuration:2];
 3     [UIView setAnimationRepeatCount:MAXFLOAT];
 4     [UIView setAnimationDelegate:self];
 5     //[UIView setAnimationDelay:3];
 6     [UIView setAnimationWillStartSelector:@selector(animationWillStart)];
 7     [UIView setAnimationCurve:UIViewAnimationCurveLinear];
 8     //[UIView setAnimationRepeatAutoreverses:YES];
 9     
10     [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.iView cache:YES];
11     
12     [UIView commitAnimations];

 

      2.   UIView Block動畫

1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間
2     animations:^{
3         //執行的動畫
4     }];
1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間
2                      animations:^{
3         //執行的動畫
4     } completion:^(BOOL finished) {
5         //動畫結束的回調
6     }];
1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間
2                           delay:(NSTimeInterval)//動畫延遲時間
3                         options:(UIViewAnimationOptions)//動畫過渡效果
4                      animations:^{
5         //執行動畫
6     } completion:^(BOOL finished) {
7         //動畫結束回調
8     }]
UIViewAnimationOptions的枚舉值:
    UIViewAnimationOptionLayoutSubviews            //進行動畫時佈局子控制項
    UIViewAnimationOptionAllowUserInteraction      //進行動畫時允許用戶交互
    UIViewAnimationOptionBeginFromCurrentState     //從當前狀態開始動畫
    UIViewAnimationOptionRepeat                    //無限重覆執行動畫
    UIViewAnimationOptionAutoreverse               //執行動畫迴路
    UIViewAnimationOptionOverrideInheritedDuration //忽略嵌套動畫的執行時間設置
    UIViewAnimationOptionOverrideInheritedCurve    //忽略嵌套動畫的曲線設置
    UIViewAnimationOptionAllowAnimatedContent      //轉場:進行動畫時重繪視圖
    UIViewAnimationOptionShowHideTransitionViews   //轉場:移除(添加和移除圖層的)動畫效果
    UIViewAnimationOptionOverrideInheritedOptions  //不繼承父動畫設置
    
    UIViewAnimationOptionCurveEaseInOut            //時間曲線,慢進慢出(預設值)
    UIViewAnimationOptionCurveEaseIn               //時間曲線,慢進
    UIViewAnimationOptionCurveEaseOut              //時間曲線,慢出
    UIViewAnimationOptionCurveLinear               //時間曲線,勻速
    
    UIViewAnimationOptionTransitionNone            //轉場,不使用動畫
    UIViewAnimationOptionTransitionFlipFromLeft    //轉場,從左向右旋轉翻頁
    UIViewAnimationOptionTransitionFlipFromRight   //轉場,從右向左旋轉翻頁
    UIViewAnimationOptionTransitionCurlUp          //轉場,下往上卷曲翻頁
    UIViewAnimationOptionTransitionCurlDown        //轉場,從上往下卷曲翻頁
    UIViewAnimationOptionTransitionCrossDissolve   //轉場,交叉消失和出現
    UIViewAnimationOptionTransitionFlipFromTop     //轉場,從上向下旋轉翻頁
    UIViewAnimationOptionTransitionFlipFromBottom  //轉場,從下向上旋轉翻頁

這3個動畫比較簡單,不再多做敘述。

 

 

Spring動畫
ios7.0以後新增了Spring動畫(IOS系統動畫大部分採用Spring Animation, 適用所有可被添加動畫效果的屬性)

[UIView animateWithDuration:(NSTimeInterval)//動畫持續時間
                   delay:(NSTimeInterval)//動畫延遲執行的時間
  usingSpringWithDamping:(CGFloat)//震動效果,範圍0~1,數值越小震動效果越明顯
   initialSpringVelocity:(CGFloat)//初始速度,數值越大初始速度越快
                 options:(UIViewAnimationOptions)//動畫的過渡效果
              animations:^{
                 //執行的動畫
 }
                  completion:^(BOOL finished) {
                 //動畫執行提交後的操作
 }];
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.2 initialSpringVelocity:5 options:UIViewAnimationOptionRepeat animations:^{
        self.iView.frame = CGRectMake(200, 400, 100, 100);
        self.iView.transform = CGAffineTransformRotate(self.iView.transform, M_PI);
    } completion:^(BOOL finished) {
        
    }];

 

Keyframes動畫:

IOS7.0後新增了關鍵幀動畫,支持屬性關鍵幀,不支持路徑關鍵幀
 [UIView animateKeyframesWithDuration:(NSTimeInterval)//動畫持續時間
                            delay:(NSTimeInterval)//動畫延遲執行的時間
                          options:(UIViewKeyframeAnimationOptions)//動畫的過渡效果
                       animations:^{
                     //執行的關鍵幀動畫
 }
                       completion:^(BOOL finished) {
                     //動畫執行提交後的操作
 }];

今天先寫到這,後續更新中...       若有不合理的地方,還望指出。

 

文章轉載:https://www.jianshu.com/p/9fa025c42261


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

-Advertisement-
Play Games
更多相關文章
  • 下載地址 https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl 建立文件夾和文件 建立data文件夾 建立logs文件夾和空文件 管理員身份進入bin文件夾 執行 打開 http://localhost:27017/ 這裡是製作mogodb的服務名 ...
  • 客戶要一張資料庫的關係模型圖,於是用SQL Developer來做。 一、SQL Developer版本 我在官網下載的最新版本(現在已經到了18.1,Oracle更新的太勤快): 2.如下圖所示選擇導入數據字典以便生成關係圖。 3.選擇要生成關係圖的用戶。 4.選擇表,標註的方框部分用於進行便捷的 ...
  • MySQL主從複製報錯如下: 2018-04-11 09:11:16 2400 [Note] Slave SQL thread initialized, starting replication in log 'binlog.000042' at position 1934531, relay lo ...
  • 1,寫的第一個觸發器 CREATE OR REPLACE TRIGGER TRIG_HNDX_YXDM --床位信息表更新時,更新xsxxb的yxdm欄位(取樓棟信息表xg_gygl_new_ldxxb的xqdm) after update on xg_gygl_new_cwxxb for each ...
  • 前面的話 本文將詳細介紹一款用nodejs開發的基於Web的mongodb資料庫管理工具mongo-express 安裝 首先,全局安裝 mongo-express 包 接著,使用如下命令來找到mongo-express的安裝目錄 在win10下的輸出結果是: 然後進入該目錄下的node_modul ...
  • SQL query practice with MySQL [toc] 0.create table / Navicat Premium Data Transfer Source Server : localhost Source Server Type : MySQL Source Server ...
  • iPhone / iOS SDK 最酷的特性之一就是應用將其自身”綁定”到一個自定義 URL scheme 上,該 scheme 用於從瀏覽器或其他應用中啟動本應用。 註冊自定義 URL Scheme 註冊自定義 URL Scheme 的第一步是創建 URL Scheme — 在 Xcode Pro ...
  • 首先說:小米的垃圾支持.我在支持頁面上看著 miuiV4或V5版本,再看我手機上9.5的版本.就感覺有些不妙. 下載下來後,點擊安裝程式,提示我安裝空間不足......我F盤可用空間140G,不夠你造的? 最後解決辦法: 首先保證你的手機開了開發者模式 和 USB調試 還有USB安裝. 下載360手 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...