首页 > 代码库 > 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基础控件之 图片浏览器