ios控件加载图片,plist,懒加载,序列帧动画,添加动画效果。
2014-05-24 22:29
513 查看
控件加载图片,plist,懒加载,序列帧动画,添加动画效果。
IOS中有2种加载图片的方式、
方式一:有缓存(图片所占用的内存会一直停留在程序中)
例如:
方式二:无缓存(图片所占用的内存会在一些特定操作后被清除)
.jpg格式的图片只能用无缓存方式加载
path是图片的全路径
其中又有:分组方式使用图片和不分组方式使用图片
分组方式导入的图片是蓝色的文件夹,创建UIImage时,需要完整的路径名(mainBundle +图片名字)
不分组方式导入的图片是黄色的文件夹,创建UIImage时,不需要完整的路径名(mianBundle+路径名+图片名字)
例如:
注: 有缓存的图片不能用无缓存的方式加载
plist:
一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist,因此也成为“Plist文件”
加载plist文件
加载后pList中的每个元素都会根据plist文件中给定的类型和数据来创建相应的元素。
一般使用plist文件加载后,会放如数据模型类中。方便提取数据
模型数据(例子)
懒加载:
懒加载主要就是2点:
1.写在get方法中(重写get方法)。
2.在get方法中,判断需要进行懒加载的变量,是否为nil
是,就加载。
否,就不需要加载。
此时,成员变量便只有在get方法调用时,加载数据。
之后再调用get方法时如果已经加载过数据了,就直接返回,不会重新再加载一次。
例如:
序列帧动画
1.判断是否在执行动画的过程中,如果是,则直接返回,不执行后面的操作
2.制作一个数组。里面存放所需要播放的所有图片(UIImage)。
3.设置动画使用的图片数组,播放的次数,播放的时候,
4.开始播放
添加动画效果
2种方式。
1.block方式(一般都使用这种方式)
2. 普通方法
IOS中有2种加载图片的方式、
方式一:有缓存(图片所占用的内存会一直停留在程序中)
+ (UIImage *)imageNamed:(NSString *)name;注:必须是png文件。需要把图片添加到 images.xcassets中
例如:
@property (weak, nonatomic) IBOutlet UIImageView *iconImageView; self.iconImageView.image=[UIImage imageNamed:@"icon"];
方式二:无缓存(图片所占用的内存会在一些特定操作后被清除)
.jpg格式的图片只能用无缓存方式加载
+ (UIImage *)imageWithContentsOfFile:(NSString *)path - (id)initWithContentsOfFile:(NSString *)path;
path是图片的全路径
其中又有:分组方式使用图片和不分组方式使用图片
分组方式导入的图片是蓝色的文件夹,创建UIImage时,需要完整的路径名(mainBundle +图片名字)
不分组方式导入的图片是黄色的文件夹,创建UIImage时,不需要完整的路径名(mianBundle+路径名+图片名字)
例如:
/* 不分组方式来使用图片 文件夹颜色为黄色。路径为 mainBundle/图片名字.后缀*/ NSString *imgName=@"icon.jpg"; // NSString *imgpath=[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:imgName]; // 与下面这句效果相同 NSString *imgpath=[[NSBundle mainBundle] pathForResource:imgName ofType:nil]; UIImage *image=[UIImage imageWithContentsOfFile:imgpath]; /* 分组方式来使用图片 文件夹颜色为蓝色色。路径为 mainBundle/图片所在路径/图片名字.后缀*/ // 使用另外一种方式来读取图片 NSString *bundlePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Animations副本"]; NSString *animPath = [bundlePath stringByAppendingPathComponent:imgName]; UIImage *image = [UIImage imageWithContentsOfFile:animPath];
注: 有缓存的图片不能用无缓存的方式加载
plist:
一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist,因此也成为“Plist文件”
// 获得Plist文件的全路径 NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"plistName" ofType:@"plist"]; //也可以 //NSString *path = [bundle pathForResource:@"plistName.plist" ofType:nil];
加载plist文件
NSArray pList=[NSArray arrayWithContentsOfFile:path];
加载后pList中的每个元素都会根据plist文件中给定的类型和数据来创建相应的元素。
一般使用plist文件加载后,会放如数据模型类中。方便提取数据
模型数据(例子)
LFAppInfo.m #import "LFAppInfo.h" @implementation LFAppInfo -(instancetype)initWithPlist:(NSDictionary *)dict{ self.icon=dict[@"icon"]; self.name=dict[@"name"]; return self; } +(instancetype)appInfoWithPlist:(NSDictionary *)dict{ return [[self alloc] initWithPlist:dict]; } @end
LFAppInfo.m #import "LFAppInfo.h" @implementation LFAppInfo -(instancetype)initWithPlist:(NSDictionary *)dict{ self.icon=dict[@"icon"]; self.name=dict[@"name"]; return self; } +(instancetype)appInfoWithPlist:(NSDictionary *)dict{ return [[self alloc] initWithPlist:dict]; } @end
懒加载:
懒加载主要就是2点:
1.写在get方法中(重写get方法)。
2.在get方法中,判断需要进行懒加载的变量,是否为nil
是,就加载。
否,就不需要加载。
此时,成员变量便只有在get方法调用时,加载数据。
之后再调用get方法时如果已经加载过数据了,就直接返回,不会重新再加载一次。
例如:
- (NSArray *)images { if (_images == nil) { NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"]; _images = [NSArray arrayWithContentsOfFile:path]; } return _images; }
序列帧动画
1.判断是否在执行动画的过程中,如果是,则直接返回,不执行后面的操作
2.制作一个数组。里面存放所需要播放的所有图片(UIImage)。
3.设置动画使用的图片数组,播放的次数,播放的时候,
4.开始播放
-(void)tomAnimation:(NSString *)img count:(int)count{ if([self.tom isAnimating]) return; NSMutableArray *arrayImg=[NSMutableArray array]; for(int i=0;i<count;i++){ NSString *imgName=[NSString stringWithFormat:@"%@_%02d.jpg",img,i]; // NSString *imgpath=[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:imgName]; // 与下面这句效果相同 NSString *imgpath=[[NSBundle mainBundle] pathForResource:imgName ofType:nil]; UIImage *image=[UIImage imageWithContentsOfFile:imgpath]; [arrayImg addObject:image]; } [self.tom setAnimationImages:arrayImg]; [self.tom setAnimationRepeatCount:1]; [self.tom setAnimationDuration:arrayImg.count*0.075]; [self.tom startAnimating]; [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration]; }
添加动画效果
2种方式。
1.block方式(一般都使用这种方式)
[UIView animateWithDuration:duration delay:0.0 options:7 << 16 animations:^{ // 需要执行动画的代码 } completion:^(BOOL finished) { // 动画执行完毕执行的代码 }];
2. 普通方法
[UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>// 需要执行动画的代码 <span style="white-space:pre"> </span> [UIView commitAnimations];
相关文章推荐
- iOS工作记录7 :ios控件加载图片,plist,懒加载,序列帧动画,添加动画效果(实用例子)
- ios给控件添加动画效果
- iOS-动画效果(图片左右滑动 添加动画效果)
- IOs-控件上添加动画效果
- iOS开发——添加动画效果、图片桢播放、时间器
- IOS 给一个控件添加一个动画组的效果
- 仿QQ好友动态添加说说、图片菜单滑动移进移出效果--在指定控件下面显示popupwindow动画不移效果
- iOS 开发中问题 ——使用xib拖拽控件操作其约束并添加动画没有效果的问题
- ios UIImageView添加图片动画效果,添加了手势之后,依然没有反应的解决方法
- 002-UIImageView和UIButton对比 UIImageView的帧动画 格式符补充 加载图片两种方式 添加删除SUBVIEW
- 论坛源码推荐(6月16日):类似iOS 7的锁屏密码动画效果 漂亮的圆形加载指示条
- IOS开发之控件加载背景图片
- CSS3实现的图片加载动画效果
- 如何以特定的时间间隔为图片添加动画效果?
- iOS为imageView添加图片实现动画
- IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
- 如何以特定的时间间隔为图片添加动画效果?
- 给控件添加动画效果
- iOS添加到购物车的简单动画效果
- 扩展easyUI tab控件,添加加载遮罩效果