1. 程式人生 > >乾貨系列之手把手教你使用Core animation 做動畫

乾貨系列之手把手教你使用Core animation 做動畫

原始碼下載:原始碼

最近在技術群裡,有人發了一張帶有動畫效果的圖片。覺得很有意思,便動手實現了一下。在這篇文章中你將會學到Core Animation顯式動畫中的關鍵幀動畫、組合動畫、CABasicAnimation動畫。先上一張原圖的動畫效果。

本文要實現的效果圖如下:

  實現的效果圖.gif

把原動畫gif動畫在mac上使用圖片瀏覽模式開啟,我們可以看到動畫每一幀的顯示。從每一幀上的展示過程,可以把整體的動畫進行拆分成兩大部分。

第一部分(Part1)從初始狀態變成取消狀態(圖片上是由橫實線變成上線橫線交叉的圓)。
第二部分(Part2)從取消狀態變回初始狀態。

下面我們先詳細分析Part1是怎麼實現的。根據動畫圖,把Part1再細分成三步。

Step1 : 中間橫實線的由右向左的運動效果。這其實是一個組合動畫。是先向左偏移的同時橫線變短。先看一下實現的動態效果。

  step1 Animation.gif

■ 向左偏移—使用基本動畫中animationWithKeyPath鍵值對的方式來改變動畫的值。我們這裡使用position.x,同樣可以使用transform.translation.x來平移。

■ 改變橫線的大小—使用經典的strokeStartstrokeEnd。其實上橫線長度的變化的由strokeStart

strokeEnd之間的值來共同來決定。改變strokeEnd的值由1.0到0.4,不改變strokeStart的值。橫線的長度會從右側方向由1.0倍長度減少到0.4倍長度。參見示意圖的紅色區域。

  stroke示意圖.png
12345678910111213141516171819202122232425-(void)animationStep1{//最終changedLayer的狀態_changedLayer.strokeEnd=0.4;//基本動畫,長度有1.0減少到0.4CABasicAnimation *strokeAnimation=[CABasicAnimation animationWithKeyPath
:@"strokeEnd"];strokeAnimation.fromValue=[NSNumber numberWithFloat:1.0f];strokeAnimation.toValue=[NSNumber numberWithFloat:0.4f];//基本動畫,向左偏移10個畫素CABasicAnimation *pathAnimation=[CABasicAnimation animationWithKeyPath:@"position.x"];pathAnimation.fromValue=[NSNumber numberWithFloat:0.0];pathAnimation.toValue=[NSNumber numberWithFloat:-10];//組合動畫,平移和長度減少同時進行CAAnimationGroup *animationGroup=[CAAnimationGroup animation];animationGroup.animations=[NSArray arrayWithObjects:strokeAnimation,pathAnimation,nil];animationGroup.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];animationGroup.duration=kStep1Duration;//設定代理animationGroup.delegate=self;animationGroup.removedOnCompletion=YES;//監聽動畫[animationGroup

相關推薦

乾貨系列手把手使用Core animation 動畫

原始碼下載:原始碼 最近在技術群裡,有人發了一張帶有動畫效果的圖片。覺得很有意思,便動手實現了一下。在這篇文章中你將會學到Core Animation顯式動畫中的關鍵幀動畫、組合動畫、CABasicAnimation動畫。先上一張原圖的動畫效果。 本文要實現的效果圖如下:  

Go語言系列手把手擼一個ORM(一)

專案地址:[https://github.com/yoyofxteam/yoyodata]() 歡迎星星,感謝 前言:最近在學習Go語言,就出於學習目的手擼個小架子,歡迎提出寶貴意見,專案使用Mysql資料庫進行開發 我們還使用Go遵循ASP.NET Core的設計理念開發出了對應的Web框架:[https

Unity教程手把手實現動畫Animation

在遊戲設計中,經常會需要實現動畫等動態效果,例如當主角在移動時,需要有一個走路的動畫,那怎麼實現播放動畫呢? 其實是非常簡單的,下面就將整個過程拆分成幾個步驟,來講解如何實現幀動畫: 將幀動畫的圖片放在工程目錄下,如: 選擇需要新增動畫的遊戲物件Gam

WebRTC系列(1)-手把手實現一個瀏覽器拍照室Demo

1.WebRTC開發背景   由於業務需求,需要在專案中實現實時音視訊通話功能,之前基於瀏覽器開發的Web專案要進行音視訊通話,需要安裝flash外掛才能實現或者使用C/S客戶端進行通訊。隨著網際網路技術的驅動下,在很多場景下需要進行音視訊通訊,在生活中我們現在使用電話越來越少,使用微信和視訊越來越多。在一

MongoDB 2 手把手增刪改查

我們在  MongoDB 之 你得知道MongoDB是個什麼鬼 MongoDB - 1  中學習瞭如果安裝部署一個 MongoDB 如果沒看到我的金玉良言的話,就重新開啟一次客戶端和服務端吧 本章我們來學習一下關於 MongoDB的增刪改查 一.MongoDB操作 之 原生

【Bugly乾貨分享】手把手逆向分析 Android 程式

很多人寫文章,喜歡把什麼行業現狀啊,研究現狀啊什麼的寫了一大通,感覺好像在寫畢業論文似的,我這不廢話,先直接上幾個圖,感受一下。 第一張圖是在把程式碼注入到地圖裡面,啟動首頁的時候彈出個浮窗,下載網路的圖片,蒼老師你們不會不認識吧? 第二張圖是微信運動步

Android開發手把手寫ButterKnife框架(一)

系列文章目錄導讀: 一、概述 JakeWharton我想在Android界無人不知,無人不曉的吧, ButterKnife這個框架就是出自他隻手。這個框架我相信很多人都用過,本系列部落格就是帶大家更加深入的認識這個框架,ButterKnife截至目前

Android開發手把手寫ButterKnife框架(三)

系列文章目錄導讀: 一、概述 然後在Processor裡生成自己的程式碼,把要輸出的類,通過StringBuilder拼接字串,然後輸出。 try { // write the file JavaFileObject

Unity教程手把手實現彈框

在遊戲中,經常會有需要彈框的場景,那如何實現彈框呢?告訴大家一個非常簡單的實現方法: 首先在場景的合適位置放置好彈框的位置: 例如,填加了個Image,放置退出彈框,將Image改名為Dialog(非必須,純屬個人習慣),在Dialog下面放置兩個butt

【程式設計師面試系列手把手如何面試:面試過程(一)

作者:Dimple Solgan:當你的才華還無法撐起你的野心時候,那應該靜下心來好好學習 公號:奔跑吧攻城獅 在之前【程式設計師面試系列】中,我們通過簡歷、技術、工作專案三個維度來說明,我們需要如何做好充分的準備工作。 良好的開端是成功的一半,只有做好了前面的準備,我們才有進一步的底氣去投遞簡歷

【Python量化】手把手用python股票分析入門

內容來自:微信公眾號:python金融量化 關注可瞭解更多的金融與Python乾貨。 目前,獲取股票資料的渠道有很多,而且基本上是免費的,比如,行情軟體有同花順、東方財富等,入口網站有新浪財經、騰訊財經、和訊網等。Python也有不少免費的開源api可以獲取交易行情資料,如pandas自

手把手實現一個引導動畫

前言 最近看了一些文章,知道了實現引導動畫的基本原理,所以決定來自己親手做一個通用的引導動畫類。 我們先來看一下具體的效果:點這裡 原理 通過維護一個Modal例項,使用Modal的mask來隱藏掉頁面的其他元素。 根據使用者傳入的需要引導的元素列表,依次來展示元素。展示元素的原理:通過cloneNode來

手把手用matlab深度學習(一)- --CNN

1.使用深度學習做目標檢測 上一篇部落格已經講解了怎麼用matlab匯入資料。 [trainingImages,trainingLabels,testImages,testLabels] = helperCIFAR10Data.load('cifar10Data');

手把手用C#疫情傳播模擬

手把手教你用C#做疫情傳播模擬 姐妹篇:手把手教你用C#做疫情傳播模擬 產品經理版 在上篇文章中,我介紹了用C#做的疫情傳播模擬程式的使用和配置,演示了其執行效果,但沒有著重講其中的程式碼。 今天我將抽絲剝繭,手把手分析程式的架構,以及妙趣橫生的細節。 首先來回顧一下執行效果: 注意看,程式中的資訊,

【震驚】手把手用python繪圖工具(一)

在這篇部落格裡將為你介紹如何通過numpy和cv2進行結和去建立畫布,包括空白畫布、白色畫布和彩色畫布。建立畫布是製作繪圖工具的前提,有了畫布我們就可以在畫布上盡情的揮灑自己的藝術細胞。 還在為如何去繪圖煩惱的小夥伴趕緊看過來,這裡手把手教你解決問題~~~~ 當然還是講究一下規則:先點贊再看,尊重一下作者

ios開發——使用CALayer和Core Animation動畫效果

一. CALayer (一). CALayer簡介 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文字標籤、一個文字輸入框、一個圖示等等,這些都是UIView,其實UIView之所以能顯示在螢幕上,完全是因為它內部的一個圖層,在建立UIView物件時,UIView內部

手把手跑Larave框架實戰筆記系列

Laravel PHP框架 系列之一為童鞋們搭好了舞臺,今天正式登臺跑框架了…… 從“路由”開始,玩一把“Hellow world!” Route::get(‘/’, function () { //return view(‘welcome’); return ‘Hellow world!’; });

手把手系列基礎篇2-python+ selenium-開啟和關閉瀏覽器(詳細)

1. 簡介 本節介紹如何初始化一個webdriver例項物件driver,然後開啟和關閉firefox瀏覽器。要用selenium開啟fiefox瀏覽器。首先需要去下載一個driver外掛geckodriver.exe, 下載地址https://github.com/mozilla/geckodriver/r

🔥《手把手系列基礎篇3-python+ selenium-驅動瀏覽器和元素定位大法(詳細)

1. 簡介 上一篇中,只是簡單地一帶而過的說了一些驅動瀏覽器,這一篇繼續說說驅動瀏覽器,然後再說一說元素定位的方法。 完成環境的安裝並測試之後,我們對Selenium有了一定的瞭解了,接下來我們繼續驅動瀏覽器做一些基本操作: 視窗尺寸設定、網頁截圖、重新整理、前進和後退 2. 視窗尺寸設定 在測試過程中,我們