2-UIImageView動(dòng)畫(序列幀動(dòng)畫)

序列幀:肉眼可以接受最高每秒20幀以內(nèi)的動(dòng)畫

屬性:

  • 設(shè)置 animation 圖片
    self.imageView.animationImages = self.array;
  • 設(shè)置播放時(shí)長
    self.imageView.animationDuration = 0.1 * self.array.count;
  • 設(shè)置播放次數(shù)
    self.imageView.animationRepeatCount = 1;
  • 開始播放動(dòng)畫
    [self.imageView startAnimating];
  • 停止播放動(dòng)畫
    [self.imageView stopAnimating];
  • 判斷imageView的狀態(tài)
    if (self.imageView.isAnimating == NO) { }

一凛俱、OC 寫法

方法一:使用Assets 資源常駐內(nèi)存
//
//  ViewController.m
//  7-序列幀動(dòng)畫
//
//  Created by 千山我獨(dú)行 on 16/10/29.
//  Copyright ? 2016年 千山我獨(dú)行. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

// moxing
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1.設(shè)置最后一幀為imageView的圖片
    self.imageView.image = [UIImage imageNamed:@"0017"];
    
    // 2.獲取 image 數(shù)組
    NSMutableArray *imgArray = [NSMutableArray array];
    for (int i=0; i<18; i++) {
        NSString *str = [NSString stringWithFormat:@"%04d",i];
        UIImage *image = [UIImage imageNamed:str];
        [imgArray addObject:image];
    }
    
    // 3.設(shè)置 animation 圖片數(shù)組
    self.imageView.animationImages = imgArray;
    // 設(shè)置播放時(shí)長
    self.imageView.animationDuration = 0.1 * imgArray.count;
    // 設(shè)置播放次數(shù)
    self.imageView.animationRepeatCount = 1;
    // 開始播放動(dòng)畫
    [self.imageView startAnimating];

}
方法二:資源存儲(chǔ)在 Bundle中映挂,播放完成后,animationImages 指向 nil
//
//  ViewController.m
//  7-序列幀動(dòng)畫
//
//  Created by 千山我獨(dú)行 on 16/10/29.
//  Copyright ? 2016年 千山我獨(dú)行. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

// moxing
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.imageView.image = [UIImage imageNamed:@"0017"];
    NSMutableArray * imgArray = [NSMutableArray array];
    for (int i=0; i<18; i++) {
        NSString *str = [NSString stringWithFormat:@"%04d",i];
        // 1.將資源放到 bundle 中
        NSString *path = [[NSBundle mainBundle] pathForResource:str ofType:@".jpg"];
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        [imgArray addObject:image];
    }
    

    self.imageView.animationImages = imgArray;
    self.imageView.animationDuration = 0.1 * imgArray.count;
    self.imageView.animationRepeatCount = 1;
    [self.imageView startAnimating];

    // 2.動(dòng)畫結(jié)束后冶忱、調(diào)用釋放內(nèi)存(在動(dòng)畫執(zhí)行結(jié)束后殷蛇,調(diào)用 ImageView 的 animationImages set方法倔监,并指向nil批旺,來釋放內(nèi)存)
    [self performSelector:@selector(releaseMem) withObject:nil afterDelay:0.1 * imgArray.count];

}

// 3.釋放內(nèi)存
- (void)releaseMem {
    self.imageView.animationImages = nil;
}

代碼簡化:

    // 2.動(dòng)畫結(jié)束后销睁、調(diào)用釋放內(nèi)存(在動(dòng)畫執(zhí)行結(jié)束后供璧,調(diào)用 ImageView 的 animationImages set方法,并指向nil冻记,來釋放內(nèi)存)
    [self performSelector:@selector(releaseMem) withObject:nil afterDelay:0.1 * imgArray.count];

}

// 3.釋放內(nèi)存
- (void)releaseMem {
    self.imageView.animationImages = nil;
}
替換為:

點(diǎn)語法調(diào)用的是 set 方法睡毒,所以可以簡化為 imageView 調(diào)用 performSelector 方法,并傳入 nil 參數(shù)

    [self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:0.1 * imgArray.count];

二冗栗、Swift

//
//  ViewController.swift
//  11-序列幀動(dòng)畫-Swift
//
//  Created by 千山我獨(dú)行 on 16/10/30.
//  Copyright ? 2016年 千山我獨(dú)行. All rights reserved.
//

import UIKit

let xCenter = UIScreen.mainScreen().bounds.origin.x / 2

class ViewController: UIViewController {
    
    
    // MARK: - 懶加載
    lazy var imageView: UIImageView = {
        let frame = CGRect(x: 91, y: 80, width: 192, height: 284)
        let imageView = UIImageView(frame: frame)
        return imageView
    }()
    

    var btn = UIButton(type: UIButtonType.System)
    
    // 動(dòng)畫資源數(shù)組
    var dataArray = [UIImage]()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 添加播放按鈕
        btn.frame = CGRect(x: 50, y: 400, width: 275, height: 40)
        btn.setTitle("播放動(dòng)畫", forState: UIControlState.Normal)
        btn.addTarget(self, action: "playAnimation1DidClick", forControlEvents: UIControlEvents.TouchUpInside)

        view.addSubview(imageView)
        view.addSubview(btn)
        
    }
    
    // MARK: - 定義方法
    // private: 私有方法演顾、swift 比較嚴(yán)謹(jǐn)、button事件的調(diào)用是在編譯時(shí)已經(jīng)決定的贞瞒,但是事件的觸發(fā)來自于 runloop偶房,編譯器不會(huì)將它編譯進(jìn)來,只有運(yùn)行時(shí)來調(diào)用军浆,這是屬于 oc 的調(diào)用方式棕洋,所以要使用 @objc 修飾
    @objc private func playAnimation1DidClick() {
        
        // 獲取圖片路徑、存儲(chǔ)到資源數(shù)組中
        for i in 0...17 {
            let name = NSString(format: "%04d", i);
            let path = NSBundle.mainBundle().pathForResource(name as String, ofType: ".jpg");
            let image = UIImage(contentsOfFile: path!)
            guard let img = image else {
                print("nil")
                return
            }
            dataArray.append(img)
        }
        // 播放動(dòng)畫
        self.playAnimation()
        
        // 動(dòng)畫結(jié)束后乒融、清空內(nèi)存中的資源
        imageView.performSelector("animationImages", withObject: nil, afterDelay: 0.1 * 17)
        
    }
    
    @objc private func playAnimation() {
        
        imageView.animationImages = dataArray
        imageView.animationDuration = 0.1 * 17
        imageView.animationRepeatCount = 1
        imageView.startAnimating()
    
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掰盘,一起剝皮案震驚了整個(gè)濱河市摄悯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愧捕,老刑警劉巖奢驯,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異次绘,居然都是意外死亡瘪阁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門邮偎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來管跺,“玉大人,你說我怎么就攤上這事禾进』砼埽” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵泻云,是天一觀的道長艇拍。 經(jīng)常有香客問我,道長宠纯,這世上最難降的妖魔是什么卸夕? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮婆瓜,結(jié)果婚禮上娇哆,老公的妹妹穿的比我還像新娘。我一直安慰自己勃救,他們只是感情好碍讨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒙秒,像睡著了一般勃黍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晕讲,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天覆获,我揣著相機(jī)與錄音,去河邊找鬼瓢省。 笑死弄息,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勤婚。 我是一名探鬼主播摹量,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缨称?” 一聲冷哼從身側(cè)響起凝果,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睦尽,沒想到半個(gè)月后器净,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡当凡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年山害,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沿量。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粗恢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欧瘪,到底是詐尸還是另有隱情,我是刑警寧澤匙赞,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布佛掖,位于F島的核電站,受9級(jí)特大地震影響涌庭,放射性物質(zhì)發(fā)生泄漏芥被。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一坐榆、第九天 我趴在偏房一處隱蔽的房頂上張望拴魄。 院中可真熱鬧,春花似錦席镀、人聲如沸匹中。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顶捷。三九已至,卻和暖如春屎篱,著一層夾襖步出監(jiān)牢的瞬間服赎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工交播, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留重虑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓秦士,卻偏偏與公主長得像缺厉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在iOS實(shí)際開發(fā)中常用的動(dòng)畫無非是以下四種:UIView動(dòng)畫芽死,核心動(dòng)畫乏梁,幀動(dòng)畫,自定義轉(zhuǎn)場動(dòng)畫关贵。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,078評(píng)論 1 23
  • 一:OC基礎(chǔ)語法1 //整型 NSInteger a =10; //NSLog是OC里面的打印函數(shù) NSLog(@...
    library閱讀 389評(píng)論 0 3
  • 對(duì)于OS系統(tǒng)中湯姆貓游戲App的構(gòu)造可以使用兩種方法遇骑;其一、是按照步驟對(duì)代碼一個(gè)一個(gè)的敲出來并使用揖曾,然而其過...
    圍籬亦海莊閱讀 534評(píng)論 0 0
  • //序列幀動(dòng)畫要播放的圖片數(shù)組 // imageView.animationImages //動(dòng)畫時(shí)長 // im...
    夢囈殤閱讀 167評(píng)論 0 0
  • // // ViewController.m // 湯姆貓 // // Created by lanou on 1...
    空氣里的天然呆閱讀 341評(píng)論 0 0