首页 > 代码库 > iOS基础控件之 图片浏览器
iOS基础控件之 图片浏览器
知识准备:
UIbutton 和UIimageview的异同:
相同点:》 都能显示图片
不同点:》 UIButton默认情况就能监听点击事件,而UIImageView默认情况下不能
》 UIButton可以在不同状态下显示不同的图片
》 UIButton既能显示文字,又能显示图片
如何选择:》 UIButton:需要显示图片,点击图片后需要做一些特定的操作
》 UIImageView:仅仅需要显示图片,点击图片后不需要做任何事情
NSArray和NSDictionary的使用:
当图片内容非常多时,“根据index来设置内容”的代码就不具备扩展性,要经常改动
为了改变现状,可以考虑讲图片数据线保存到一个数组中,数组中有序地放着很多字典,一个字典代表一张图片数据,包含了图片名、图片描述 @property (strong, nonatomic) NSArray *images;
“懒加载”\”延迟加载”
由于只需要初始化一次图片数据,因此放在get/set方法中初始化/调用
将属性放在get方法中初始化的方式,称为“懒加载”\”延迟加载”
什么是Plist文件
》 直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低
》 因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码
》 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种属性列表文件的扩展名是plist,因此也称为“Plist文件”
功能分析
》点击箭头切换序号、图片、描述
》如果是首张图片,左边箭头不能点击
》如果是尾张图片,右边箭头不能点击
步骤分析
》搭建UI界面
》监听按钮点击
》切换序号、图片、描述
程序实现
//// kViewController.m// 图片浏览器//// Created by Kengsir on 15-1-8.// Copyright (c) 2015年 ___FULLUSERNAME___. All rights reserved.////#import "kViewController.h"#define kicon @"icon"#define kdesc @"desc"@interface kViewController ()@property (weak, nonatomic) IBOutlet UIImageView *iconView;@property (weak, nonatomic) IBOutlet UILabel *noLabel;@property (weak, nonatomic) IBOutlet UILabel *descLabel;@property (weak, nonatomic) IBOutlet UIButton *leftbtn;@property (weak, nonatomic) IBOutlet UIButton *rightbtn;- (IBAction)right;- (IBAction)left;//一般对象用strong,控件用weak@property (assign,nonatomic)int index;@property (strong,nonatomic) NSArray *array;@end@implementation kViewController- (void)viewDidLoad{ [super viewDidLoad]; [self changeData];}//延迟加载数据,将属性放在get方法中初始化的方式,称为懒加载-(NSArray *)array{ if(_array ==nil){//从未初始化过 //初始化数据 NSMutableDictionary *image1 = [NSMutableDictionary dictionary]; image1[kicon] = @"biaoqingdi"; image1[kdesc] = @"表情帝"; NSMutableDictionary *image2 = [NSMutableDictionary dictionary]; image2[kicon] = @"wangba"; image2[kdesc] = @"王八"; NSMutableDictionary *image3 = [NSMutableDictionary dictionary]; image3[kicon] = @"wangba"; image3[kdesc] = @"王八"; //快速创建数组,将字典放入数组 self.array = @[image1,image2,image3]; } return _array;}//程序的扩展性要好-(void)changeData{ //1. 改变数据 self.noLabel.text = [NSString stringWithFormat:@"%d/%d",self.index + 1 , self.array.count]; //2.根据数组index 取出 对应的字典数据 NSDictionary *imagedict = self.array[self.index]; NSLog(@"%@",imagedict); //3.设置图片 //NSString *name = imagedict[kicon]; self.iconView.image = [UIImage imageNamed:imagedict[kicon]]; //4.设置描述 self.descLabel.text = imagedict[kdesc]; //改变按钮判断状态// if(self.index == 0){// self.leftbtn.enabled = NO;// }else {// self.leftbtn.enabled = YES;// }// if(self.index == 1){// self.rightbtn.enabled = NO;// }else {// self.rightbtn.enabled = YES;// } self.leftbtn.enabled = (self.index == 0)?NO:YES; self.rightbtn.enabled = (self.index != self.array.count - 1);}- (IBAction)right{ self.index ++ ; [self changeData];}- (IBAction)left { self.index --; [self changeData]; }@end
效果截图:
优化:使用plist存储数据
通过代码来解析Plist文件中的数据获得Plist文件的全路径NSBundle *bundle = [NSBundle mainBundle];NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];改写本来写死的初始化数据的get方法用来加载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;}
iOS基础控件之 图片浏览器