UI基础-day02-帧动画-03播放器

UI基础-day02-帧动画-01基本实现
UI基础-day02-帧动画-02抽取重复代码

需求:

  1. 分别已缓冲和非缓冲的方式加载图片
  2. 实现播放声音的功能

具体实现

  1. 缓冲和非缓冲


    UI基础-day02-帧动画-03播放器_第1张图片
    查看图片是否有缓冲
1)缓冲问题:
1.什么是缓冲? 资源使用完后,没有立即清除,而是把资源放入内存里,下次直接从内存读取.
2.优缺点? 优点,读取速度快. 缺点,占用内存,容易'闪崩'.
3.图片缓冲怎么写? [UIImage imageNamed:XX]; 只要使用imageNamed方法,系统会自动完成缓冲.
疑问: 图片不在Assets.xcassets里面,但是还是使用imageNamed方法,是否还是'缓冲'?
经测试图片不在Assets里面,使用imageNamed方法,还是有'缓冲'.(在功能结束后,memory值不降)
怎么知道当前图片是否采用缓冲? 查看Memory值的变化(如:图片显示完后,值有下降,则没有采用缓冲)

2)图片不想用'缓冲'的方法,获取图片怎么办?
1.图片不能放在Assets.xcassets!
因为放在Assets里面的文件,最后会被打包成Assets.car的压缩文件(无法获取,图片的路径).
只能通过imageNamed方法获取图片.
2.不使用imageNamed方法获取图片.
3.具体代码(图片不放在Assets文件夹里)
[NSBundle mainBundle];//获取Bundle目录
[bundle pathForResource:imgName ofType:@"png"];//获取指定资源路径
UIImage *img = [UIImage imageWithContentsOfFile:文件路径];//获取图片

结论:
只要将图片放入Assets.xcassets里面,就是有缓冲!
(Assets.xcassets里面图片,只能通过图片名去加载,苹果会压缩图片,且默认带有缓存)
只要使用imageNamed方法来读取文件,就是有缓冲!
  1. 播放音乐
//1) 加载AVFoundation框架
#import 
@interface ViewController ()
@property (nonatomic, strong) AVPlayer *myPlayer;
// 2) 播放音频
// 第一种方法, 知道音频的具体位置
//file:// - 协议头(本地),http:// - 协议头(网络),'/Users'当前根目录/Users
NSURL *url = [[NSURL alloc]initWithString:@"file:///XXXX/dz.mp3"];
self.myPlayer = [[AVPlayer alloc]initWithURL:url];
[self.myPlayer play];

//第二种方法,音频已经打包到"软件安装包"里面
//URLForResource:文件名称, withExtension:文件后缀,不需要'.'.
//subdirectory:在程序包中的哪个子目录中寻找.如果没有找到将会返回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];

你可能感兴趣的:(UI基础-day02-帧动画-03播放器)