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
  • 示例項目結構 在 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# ...