码迷,mamicode.com
首页 > 移动开发 > 详细

iOS基础控件之 图片浏览器

时间:2015-01-09 12:16:40      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

知识准备:

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基础控件之 图片浏览器

标签:

原文地址:http://www.cnblogs.com/kengsir/p/4212779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!