UI基礎(chǔ)-day02-幀動畫-01基本實(shí)現(xiàn)
UI基礎(chǔ)-day02-幀動畫-02抽取重復(fù)代碼
需求:
- 分別已緩沖和非緩沖的方式加載圖片
- 實(shí)現(xiàn)播放聲音的功能
具體實(shí)現(xiàn)
-
緩沖和非緩沖
1)緩沖問題:
1.什么是緩沖? 資源使用完后,沒有立即清除,而是把資源放入內(nèi)存里,下次直接從內(nèi)存讀取.
2.優(yōu)缺點(diǎn)? 優(yōu)點(diǎn),讀取速度快. 缺點(diǎn),占用內(nèi)存,容易'閃崩'.
3.圖片緩沖怎么寫? [UIImage imageNamed:XX]; 只要使用imageNamed方法,系統(tǒng)會自動完成緩沖.
疑問: 圖片不在Assets.xcassets里面,但是還是使用imageNamed方法,是否還是'緩沖'?
經(jīng)測試圖片不在Assets里面,使用imageNamed方法,還是有'緩沖'.(在功能結(jié)束后,memory值不降)
怎么知道當(dāng)前圖片是否采用緩沖? 查看Memory值的變化(如:圖片顯示完后,值有下降,則沒有采用緩沖)
2)圖片不想用'緩沖'的方法,獲取圖片怎么辦?
1.圖片不能放在Assets.xcassets!
因?yàn)榉旁贏ssets里面的文件,最后會被打包成Assets.car的壓縮文件(無法獲取,圖片的路徑).
只能通過imageNamed方法獲取圖片.
2.不使用imageNamed方法獲取圖片.
3.具體代碼(圖片不放在Assets文件夾里)
[NSBundle mainBundle];//獲取Bundle目錄
[bundle pathForResource:imgName ofType:@"png"];//獲取指定資源路徑
UIImage *img = [UIImage imageWithContentsOfFile:文件路徑];//獲取圖片
結(jié)論:
只要將圖片放入Assets.xcassets里面,就是有緩沖!
(Assets.xcassets里面圖片,只能通過圖片名去加載,蘋果會壓縮圖片,且默認(rèn)帶有緩存)
只要使用imageNamed方法來讀取文件,就是有緩沖!
- 播放音樂
//1) 加載AVFoundation框架
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
@property (nonatomic, strong) AVPlayer *myPlayer;
// 2) 播放音頻
// 第一種方法, 知道音頻的具體位置
//file:// - 協(xié)議頭(本地),http:// - 協(xié)議頭(網(wǎng)絡(luò)),'/Users'當(dāng)前根目錄/Users
NSURL *url = [[NSURL alloc]initWithString:@"file:///XXXX/dz.mp3"];
self.myPlayer = [[AVPlayer alloc]initWithURL:url];
[self.myPlayer play];
//第二種方法,音頻已經(jīng)打包到"軟件安裝包"里面
//URLForResource:文件名稱, withExtension:文件后綴,不需要'.'.
//subdirectory:在程序包中的哪個(gè)子目錄中尋找.如果沒有找到將會返回nil
NSBundle *myBundle = [NSBundle mainBundle];//獲取"軟件包"目錄
NSURL * mp3URL =[myBundle URLForResource:@"dazhao" withExtension:@"mp3"]; //第一種方式
//NSURL * mp3URL = [myBundle URLForResource:@"/dazhao.mp3" withExtension:nil];//第二種方式
self.myPlayer = [[AVPlayer alloc]initWithURL:mp3URL];
[self.myPlayer play];