本节重点:
了解uibutton label imagView 的常用属性
了解加载plist 的过程
了解 NSArray 读取文件的方法
了解为什么使用懒加载
使用pilst 能让程序代码之间减少耦合性,跟代码的复用
NSBundle // 一个目录类
[NSbunlde mainBundle] //表示当前程序的目录
效果图片 :
代码示例 :
//
// SJViewController.m
// 04.ImageDemo
//
// Created by SJ.abnormal on 15-1-30.
// Copyright (c) 2015年 SJ.abnormal. All rights reserved.
//
#import "SJViewController.h"
typedef enum {
TAGZero,
TAGOne,
TAGtwo,
TAGThree,
TAGFour,
TAGFive,
TAGSix,
TAGSeven
} TAG;
@interface SJViewController ()
@property(weak,nonatomic) UILabel *noLabel; //序号文本
@property(weak,nonatomic) UILabel *infoLabel; //信息文本
@property(weak,nonatomic) UIButton *leftBtn; //向左按钮
@property(weak,nonatomic) UIButton *rightBtn; //向右按钮
@property(weak,nonatomic) UIImageView *imageHead; //显示的图像
@property (assign,nonatomic) NSUInteger index; //设置图片索引
@property (copy, nonatomic) NSArray *dataImage; //图片资源
@end
@implementation SJViewController
#pragma mark - 即将初始化代码
- (void)viewDidLoad
{
[super viewDidLoad];
[self change];
}
#pragma mark - buttonClick button点击事件
- (void) buttonClick: (UIButton *) btn {
int index = btn.tag; //记录btag值
if (index == TAGtwo) {
self.index--;
[self change];
}else {
self.index++;
[self change];
}
}
#pragma mark - noLabel 序号懒加载
- (UILabel *)noLabel {
if (!_noLabel) {
_noLabel = [self labelWithFrame:CGRectMake(110, 30, 100, 30) andTag:TAGOne addTitle:@"你妹"];
[self.view addSubview:_noLabel];
}
return _noLabel;
}
#pragma mark - change 更改图片 文本 序号等信息
- (void) change {
int count = self.dataImage.count; //获取图像资源数组的长度
int index = self.index; //获取索引值
NSDictionary *data = self.dataImage[index]; //取出对应的字典
self.noLabel.text = [NSString stringWithFormat:@"%d/%d",index+1,count];
self.infoLabel.text = data[@"desc"]; //取出字典的desc元素
self.imageHead.image = [UIImage imageNamed:data[@"icon"]]; //取出字典的icon元素
self.leftBtn.enabled = index > TAGZero;
self.rightBtn.enabled = self.index < count-1;
}
#pragma mark - infoLabel 文本信息懒加载
- (UILabel *)infoLabel{
if (!_infoLabel) {
_infoLabel = [self labelWithFrame:CGRectMake(85, 240, 150, 30) andTag:TAGFive addTitle:nil];
[self.view addSubview:_infoLabel];
}
return _infoLabel;
}
#pragma mark - leftBtn 向左按钮懒加载
- (UIButton *)leftBtn {
if (!_leftBtn) {
_leftBtn = [self buttonWithFrame:CGRectMake(20, 150, 35, 35) andTag:TAGtwo addNormalImage:@"left_normal" addhighlightedImage:@"left_highlighted"];
_leftBtn.enabled = NO; //禁止按钮被点击
[self.view addSubview:_leftBtn];
}
return _leftBtn;
}
#pragma mark - rightBtn 向右按钮懒加载
- (UIButton *)rightBtn {
if (!_rightBtn) {
_rightBtn = [self buttonWithFrame:CGRectMake(265, 150, 35, 35) andTag:TAGFour addNormalImage:@"right_normal" addhighlightedImage:@"right_highlighted"];
[self.view addSubview:_rightBtn];
}
return _rightBtn;
}
#pragma mark - imageHead imageHead懒加载
- (UIImageView *)imageHead {
if (!_imageHead) {
_imageHead = [self imageViewWithFrame:CGRectMake(85, 80, 150, 150) andTag:TAGThree addNormalImage:nil];
[self.view addSubview:_imageHead];
}
return _imageHead;
}
#pragma mark - labelWithFrame label工厂模块
- (UILabel *) labelWithFrame:(CGRect) frame andTag:(NSUInteger)index addTitle: (NSString *)title {
UILabel *label = [[UILabel alloc]initWithFrame:frame]; //创建label 并设置坐标大小
label.text = title; //设置label标题
label.tag = index; //设置tag值
label.textAlignment = NSTextAlignmentCenter; //设置label标题居中
return label; //返回label对象
}
#pragma mark - buttonWithFrame button工厂模块
- (UIButton *) buttonWithFrame:(CGRect) frame andTag:(NSUInteger)index addNormalImage: (NSString *)normal addhighlightedImage: (NSString *)highlighted{
UIButton *btn = [[UIButton alloc]initWithFrame:frame]; //创建btn 并设置坐标大小
btn.tag = index;; //设置tag值
[btn setBackgroundImage:[UIImage imageNamed:normal] forState:UIControlStateNormal]; //设置默认状态的图片
[btn setBackgroundImage:[UIImage imageNamed:highlighted] forState:UIControlStateHighlighted];//设置高亮状态的图片
[btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; //添加触发事件
return btn; //返回btn对象
}
#pragma mark - labelWithFrame label工厂模块
- (UIImageView *)imageViewWithFrame:(CGRect) frame andTag:(NSUInteger)index addNormalImage: (NSString *)normal {
UIImageView *imagevView = [[UIImageView alloc]initWithFrame:frame]; //创建iimageView 并设置坐标大小
imagevView.tag = index; //设置tag值
imagevView.image = [UIImage imageNamed:normal]; //设置imageHead显示的图片
return imagevView; //返回label对象
}
- (NSArray *)dataImage {
if (!_dataImage) {
//获取plist数据的文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"imageData" ofType:@"plist"];
//将数据读取存入数组
_dataImage = [NSArray arrayWithContentsOfFile:path];
}
return _dataImage;
}
@end