基础 (八) : 帧动画/plist

掌握

UIImageView帧动画的使用

UIImage的2种加载方式

重复代码的封装抽取

文档注释的写法

UIImageView帧动画相关属性和方法

@property(nonatomic,copy) NSArray *animationImages;

需要播放的序列帧图片数组(里面都是UIImage对象,会按顺序显示里面的图片)

@property(nonatomic) NSTimeInterval animationDuration;

帧动画的持续时间

@property(nonatomic) NSInteger animationRepeatCount;

帧动画的执行次数(默认是无限循环)

  • (void)startAnimating;

开始执行帧动画

-(void)stopAnimating;

停止执行帧动画

-(BOOL)isAnimating;

是否正在执行帧动画

UIImage的2种加载方式

方式一:有缓存(图片所占用的内存会一直停留在程序中)

+(UIImage *)imageNamed:(NSString *)name;

name是图片的文件名

方式二:无缓存(图片所占用的内存会在一些特定操作后被清除)

+(UIImage *)imageWithContentsOfFile:(NSString *)path

-(id)initWithContentsOfFile:(NSString *)path;

path是图片的全路径

重复代码的封装抽取

当一份代码重复出现在程序的多处地方,就会造成程序又臭又长,当这份代码的结构要修改时,每一处出现这份代码的地方都得修改,导致程序的扩展性很差
因此,要将重复出现的代码抽取到某个方法中,在需要这份代码的地方调用方法即可
抽取代码的思路

将相同的代码放到一个方法中

将不同的值当做方法参数传进来

掌握

按钮的多功能使用

@2x的含义

应用程序图标、启动图片的添加

状态栏

在iOS7中,状态栏默认情况下归控制器管理,比如状态栏的样式、状态栏的是否可见

控制器通过重写以下方法来控制状态栏

设置状态栏的样式

(UIStatusBarStyle)preferredStatusBarStyle;

其中UIStatusBarStyleLightContent是白色样式

设置状态栏的可见性

  • (BOOL)prefersStatusBarHidden;
未命名图片1.png

未命名图片.png

应用程序启动图片

一个app在启动过程中会全屏显示叫做Default.png的图片

不同规格Default的使用场合

Default.png:非retina-iPhone屏幕,320x480

[email protected]:retina-iPhone屏幕,640x960

[email protected]:4inch的retina-iPhone屏幕,640x1136

Default-Portrait~ipad.png:非retain-iPad竖屏屏幕,768x1024

[email protected]:retain-iPad竖屏屏幕,1536x2048

Default-Landscape~ipad.png:非retain-iPad横屏屏幕,1024x768

[email protected]:retain-iPad横屏屏幕,2048x1536

UIButton

UIButton有很多种状态,它提供了一些便捷属性,可以直接获取当前状态下的文字、文字颜色、图片等

@property(nonatomic,readonly,retain) NSString *currentTitle;

@property(nonatomic,readonly,retain)UIColor *currentTitleColor;

@property(nonatomic,readonly,retain)UIImage *currentImage;

@property(nonatomic,readonly,retain) UIImage
*currentBackgroundImage;

未命名图片2.png

UIButton和UIImageView

相同点

都能显示图片

不同点

UIButton默认情况就能监听点击事件,而UIImageView默认情况下不能

UIButton可以在不同状态下显示不同的图片

UIButton既能显示文字,又能显示图片

如何选择

UIButton:需要显示图片,点击图片后需要做一些特定的操作
UIImageView:仅仅需要显示图片,点击图片后不需要做任何事情
UIImage:父类为NSObject,不是一个控件,只是一个图片

NSArray和NSDictionary的使用

当图片内容非常多时,“根据index来设置内容”的代码就不具备扩展性,要经常改动

为了改变现状,可以考虑将图片数据线保存到一个数组中,数组中有序地放着很多字典,一个字典代表一张图片数据,包含了图片名、图片描述

@property (strong, nonatomic) NSArray *images;

由于只需要初始化一次图片数据,因此放在get方法中初始化

将属性放在get方法中初始化的方式,称为“懒加载”\”延迟加载”

什么是Plist文件

直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低

因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码

一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist,因此也成为“Plist文件”

未命名图片4.png

解析Plist文件

接下来通过代码来解析Plist文件中的数据

获得Plist文件的全路径

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

加载plist文件

_images = [NSArray arrayWithContentsOfFile:path];

-(NSArray *)images

{

if (_images == nil) {

  NSBundle *bundle = [NSBundle mainBundle];

  NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

    _images= [NSArray arrayWithContentsOfFile:path];


}

return _images;

}

未命名图片5.png

你可能感兴趣的:(基础 (八) : 帧动画/plist)