1. 程式人生 > >[置頂]iOS--使用UIImageView進行GIF動圖播放

[置頂]iOS--使用UIImageView進行GIF動圖播放

大家好,好久沒有跟新了。其實也就昨天到今天的時間。

前言:實際上,GIF動圖檔案中包含了一組圖片及其資訊陣列,這些資訊資料記錄著這一組圖片中各張圖片的播放時長等資訊,我們可以將圖片和這些資訊或取出來,使用UIImageView的幀動畫技術進行動畫播放。

好了不多說了  開始上程式碼吧:

首先自己找一個GIF圖吧,拖到工程裡面。

- (void)createGIF {

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 100, 280, 200)];

    [self.view addSubview:imageView];

    //1.找到gif檔案路徑

    NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"11" ofType:@"gif"];

    //2.獲取gif檔案資料

    CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:dataPath], NULL);

    //3.獲取gif檔案中圖片的個數

    size_t count = CGImageSourceGetCount(source);

    //4.定義一個變數記錄gif播放一輪的時間

    float allTime = 0;

    //5.定義一個可變陣列存放所有圖片

    NSMutableArray *imageArray = [[NSMutableArray alloc] init];

    //6.定義一個可變陣列存放每一幀播放的時間

    NSMutableArray *timeArray = [[NSMutableArray alloc] init];

    //7.每張圖片的寬度

    NSMutableArray *widthArray = [[NSMutableArray alloc] init];

    //8.每張圖片的高度

    NSMutableArray *heightArray = [[NSMutableArray alloc] init];

    //遍歷gif

    for (size_t i=0; i<count; i++) {

        CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);

        [imageArray addObject:(__bridge UIImage *)(image)];

        CGImageRelease(image);

        //獲取圖片資訊

        NSDictionary *info = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, i, NULL);

        NSLog(@"info---%@",info);

        //獲取寬度

        CGFloat width = [[info objectForKey:(__bridge NSString *)kCGImagePropertyPixelWidth] floatValue];

        //獲取高度

        CGFloat height = [[info objectForKey:(__bridge NSString *)kCGImagePropertyPixelHeight] floatValue];

        //

        [widthArray addObject:[NSNumber numberWithFloat:width]];

        [heightArray addObject:[NSNumber numberWithFloat:height]];

        //統計時間

        NSDictionary *timeDic = [info objectForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary];

        CGFloat time = [[timeDic objectForKey:(__bridge NSString *)kCGImagePropertyGIFDelayTime] floatValue];

        [timeArray addObject:[NSNumber numberWithFloat:time]];

    }

    //新增幀動畫

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];

    NSMutableArray *times = [[NSMutableArray alloc] init];

    float currentTime = 0;

    //設定每一幀的時間佔比

    for (int i=0; i<imageArray.count; i++) {

        [times addObject:[NSNumber numberWithFloat:currentTime/allTime]];

        currentTime +=[timeArray[i] floatValue];

    }

    [animation setKeyTimes:times];

    [animation setValues:imageArray];

    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];

    //設定迴圈

    animation.repeatCount = MAXFLOAT;

    //設定播放總時長

    animation.duration = allTime*MAXFLOAT;

    //Layer層新增

    [[imageView layer]addAnimation:animation forKey:@"gifAnimation"];

}

這個是原始碼:

下面是我打印出來的資訊:

好了,今天就到這裡了,謝謝大家的支援。我的簡書地址:http://www.jianshu.com/users/795c2ec428fd/latest_articles 

 另外附上GitHub地址:https://github.com/PengHongMiao

相關推薦

[]iOS--使用UIImageView進行GIF播放

大家好,好久沒有跟新了。其實也就昨天到今天的時間。 前言:實際上,GIF動圖檔案中包含了一組圖片及其資訊陣列,這些資訊資料記錄著這一組圖片中各張圖片的播放時長等資訊,我們可以將圖片和這些資訊或取出來,使用UIImageView的幀動畫技術進行動畫播放。 好了不多說了  開始上

騰訊技術分享:GIF技術詳解及手機QQ動態表情壓縮技術實踐

表示 pack iii 技巧總結 fff 設備 思路 表情包 作用 本文來自騰訊前端開發工程師“ wendygogogo”的技術分享,作者自評:“在Web前端摸爬滾打的碼農一枚,對技術充滿熱情的菜鳥,致力為手Q的建設添磚加瓦。” 1、GIF格式的歷史 GIF ( Graph

怎樣把視訊中的一小段製作成 GIF

  平常生活中大家聊天肯定會發現有很多鬥圖高手,不管是家人群、同學群還是好友群,從不缺乏這樣的人,大多數用來鬥圖的圖片都是GIF動圖,GIF動圖即有趣又形象,像小視訊一樣,只不過它是圖片格式。大家對GIF製作感興趣嗎?想不想自己動手製作屬於自己的GIF動畫,想的話就跟著小編一起來操作吧! &

【Android】從無到有:手把手一步步使用android-gif-drawable包載入GIF

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80200129 【新增依賴】 首先需要新增android-gif-drawable依賴,請參考:【Android】實用教程:匯入android-gif-drawa

怎麼製作gif

  網路聊天中,幾個朋友之間有時候聊著聊著就會開始鬥起了圖,從靜態的鬥到動態的圖片,不知道你們在鬥圖的過程中有沒有想過這樣一個問題,那麼就是這些動態的GIF圖片是如何製作的呢?我想大部分愛鬥圖的小夥伴都是想過的,其實製作GIF動圖並不難,下面小編就分享下GIF動圖具體的製作方法。   使用方法  

視訊轉GIF攻略,視訊轉GIF軟體有哪些

  有時我們製作GIF動圖,可以採用視訊轉換的方法來製作,比如網上看到些好玩的視訊,然後把它轉成GIF動圖,那麼如何將視訊轉換為GIF動圖呢?其實很簡單,有一款好用的GIF製作軟體便能夠輕鬆做到,比如說迅捷GIF製作工具請新增連結描述就十分的不錯,下面小編便來教大家如何使用它將視訊轉換成GIF動圖。   迅

怎麼製作GIF,製作GIF攻略

  網路聊天中,使用GIF動圖已經成為一種常態。很多人都習慣了使用GIF動圖來表達自己的心情,那麼你們有想過你們手中的GIF動圖是怎麼製作的嗎?我想肯定都是想過的。其實製作GIF並不困難,有款迅捷GIF製作工具請新增連結描述便能夠輕鬆駕馭了。下面小編就來分享下製作GIF動圖的方法,教大家如何製作GIF動圖。

下載gif

下載gif動圖 微信傳送 1,左鍵按住gif圖片拖動到桌面 2,右鍵gif圖片獲取圖片地址 3,使用urllib.request.urlretrieve 1,左鍵按住gif圖片拖動到桌面 2,右鍵gif圖片獲取圖片地址 wget

在Qt中加入GIF

#include "waitingpage.h" #include "ui_waitingpage.h" #include <QMovie> #include <QGridLayout> #include <QLabel>

opencv之gif製作

import cv2 import imageio img1=cv2.imread('./yang1.jpg',1) img2=cv2.imread("./yang2.jpg",1) img3=cv2.imread("./yang3.jpg",1) img1 = cv2.resize(img1, (

python作圖都是小把戲,python實現倒放gif,這才牛逼!

  現在的各種動圖層出不窮,深受大家喜歡,今天給大家介紹一個可以把gif動圖倒放的python程式,先來看下效果。 學習Python中有不明白推薦加入交流群                 號:5

python實現倒放gif

現在的各種動圖層出不窮,深受大家喜歡,今天給大家介紹一個可以把gif動圖倒放的python程式,先來看下效果。     gif動圖簡單理解就是由一組若干張圖片按照一定的順序迴圈播放,如果我們能把一張gif動圖分解成若干張圖,然後再把這若干張圖倒序排列,

Android中GIF播放控制和監聽詳解

android下播放gif圖片功能似乎並不常用,很多時候還是以展示靜態圖片為主,可能是由於gif圖體積比較大吧。不過像表情動畫什麼的,可能還是需要gif圖的。本文主要給大家介紹了關於Android中GIF動圖的播放控制和監聽的相關資料,需要的朋友可以參考下。 前

小豬,以GIF搜尋為切入點,為新媒體運營提供GIF創意素材

在微信或QQ聊天時,你一定聽說過鬥圖這回事,在我們的社交軟體裡每天都流動著大量的GIF表情包,GIF的存在就如同空氣一般的習以為常。小豬動圖(www.piggif.com)創始人趙廣在他之前的創業經歷中接觸了大量網際網路企業和運營人員,發現各家的內容運營為了增加使用者閱讀數和活躍度,每天都會找圖片素

小豬:只需一鍵搜尋,瞬間獲取百萬張魔性的GIF……

GIF動圖格式已有30年曆史,它是唯一一種不需要播放器或外掛就可以在任何網路上實現類視訊效果的檔案格式。如今GIF成為了一種網路文化,在微信、QQ等社交APP上流行的鬥圖,其中最魔性的絕對是GIF動圖;在微信公眾號、頭條號、微博等新媒體上傳播最快的也是GIF動圖,它就如同空氣一般的存在,給我們帶來了

Animaticons:免費下載漂亮、可定製的 Gif 圖示

根據我的經驗,要尋找免費圖示的網站不少,但若要找會動的動態GIF圖示,相對來說就少很多,畢竟GIF圖示在開發難度上會更困難一些,大部分都要付費才能取得。最近在網路上發現一個Animaticons網站,提供了幾組美觀、可自訂化的動態GIF圖示讓使用者免費下載,若你想

如何擷取電影畫面轉換成gif做微信表情包

  現在越來越多的GIF動態圖片了,層出不窮的在更新,就像在QQ、微信裡聊天,都會看到很多不同的好笑有趣的GIF圖片,那麼除了網上別人製作的GIF圖片,我們自己也能夠製作。擷取電影或電視劇某幾秒畫面轉換成GIF動圖,然後發到微信上,做成微信表情包,就可以隨時隨地分享給好友了。由於表情包一般是gif格

python matplotlib繪製gif以及儲存

python matplotlib繪製gif動圖以及儲存 標籤: python matplotlib 謹以此文紀念我兩天來的悲劇 昨天我用lstm擬合sin曲線,看到別人畫的做的動圖很好看,並且還能儲存下來,所以我也想做著玩一下,但是沒想到在網上各種教程都不太對,最後還

十大經典排序演算法最強總結(含JAVA程式碼實現 +演算法Gif

最近在複習排序演算法,對於演算法自己理解的總是不那麼透徹,所以在網路上搜索到有很多優秀的總結,借前輩們的經驗來灌輸一下自己,也不失為一件有效的學習方法,更有效的學習和記憶,適合自己的都是好方法。這裡總結了十大經典排序演算法,並且有Gif動圖,讓你學習起來一目瞭然,快來一起學

樹梅派應用7:用樹莓派DIY一臺專門拍Gif的相機

樹莓派在喜歡DIY的朋友眼裡,是非常酷的東西,許多人都會利用樹莓派自己動手DIY出各種各樣有趣的技術。而現在又有人利用樹莓派製造出了一臺福庫Pix-E相機,而這款相機最有趣的地方就是可以直接拍攝出gif動態圖。 現在無論是朋友圈、公眾號還是微博,gif動態圖已經成為展示內