UI基础-图片浏览器

  本篇使用UIImageView\UILabel\UIButton实现一个综合的小案例.

  功能分析:

    • 点击箭头切换序号\图片\描述
    • 如果是首张图片,左边箭头不能点击
    • 如果是尾张图片,右边箭头不能点击

  步骤分析:

    • 搭建UI界面:两个UILabel,一个UIImageView,两个UIButton
    • 监听按钮点击
    • 切换序号\图片\描述

附上storyboard拖线的图片:

附上源代码:

ViewController.m

  1 //
  2 //  ViewController.m
  3 //  01-图片浏览器1
  4 //
  5 //  Created by hukezhu on 15/5/12.
  6 //
  7 //
  8
  9 #import "ViewController.h"
 10
 11 @interface ViewController ()
 12 /**  界面上最上面显示索引的label*/
 13 @property (weak, nonatomic) IBOutlet UILabel *noLabel;
 14 /**  显示图片的控件*/
 15 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
 16 /**  描述图片内容的label*/
 17 @property (weak, nonatomic) IBOutlet UILabel *descLabel;
 18 /**
 19  *  左边按钮的属性,用来控制按钮的不可用状态
 20  */
 21 @property (weak, nonatomic) IBOutlet UIButton *left;
 22 /**
 23  *  右边按钮的属性,用来控制按钮的不可用状态
 24  */
 25 @property (weak, nonatomic) IBOutlet UIButton *right;
 26 /**
 27  *  索引,记录位置
 28  */
 29 @property (nonatomic ,assign)int index;
 30 /**
 31  *  上一张的点击响应方法
 32  */
 33 - (IBAction)previous;
 34 /**
 35  *  下一张的点击响应方法
 36  */
 37 - (IBAction)next;
 38 @end
 39
 40 @implementation ViewController
 41
 42 - (void)viewDidLoad {
 43     [super viewDidLoad];
 44
 45     //首先将当前计数器设置为-1,然后再调用next方法,即可显示首页面.
 46     self.index = -1;
 47     [self next];
 48 }
 49
 50 - (IBAction)previous{
 51
 52     //计数器减一
 53     self.index--;
 54     switch (self.index) {
 55         case 0:
 56             self.noLabel.text = @"1/5";
 57             self.iconView.image = [UIImage imageNamed:@"biaoqingdi"];
 58             self.descLabel.text = @"哥牛逼啊";
 59             break;
 60         case 1:
 61             self.noLabel.text = @"2/5";
 62             self.iconView.image = [UIImage imageNamed:@"bingli"];
 63             self.descLabel.text = @"亮瞎眼啊";
 64             break;
 65         case 2:
 66             self.noLabel.text = @"3/5";
 67             self.iconView.image = [UIImage imageNamed:@"chiniupa"];
 68             self.descLabel.text = @"小姑娘吃牛排比杀牛还费劲";
 69             break;
 70         case 3:
 71             self.noLabel.text = @"4/5";
 72             self.iconView.image = [UIImage imageNamed:@"danteng"];
 73             self.descLabel.text = @"蛋疼";
 74             break;
 75         case 4:
 76             self.noLabel.text = @"5/5";
 77             self.iconView.image = [UIImage imageNamed:@"wangba"];
 78             self.descLabel.text = @"王八";
 79             break;
 80
 81     }
 82     //设置按钮的不可用状态,当计数器为0时,左边的按钮为不可用状态
 83     self.left.enabled = self.index != 0;
 84     //当计数器为4时,右边的按钮为不可用状态
 85     self.right.enabled = self.index != 4;
 86
 87 }
 88 - (IBAction)next{
 89
 90     self.index++;
 91     switch (self.index) {
 92         case 0:
 93             self.noLabel.text = @"1/5";
 94             self.iconView.image = [UIImage imageNamed:@"biaoqingdi"];
 95             self.descLabel.text = @"哥牛逼啊";
 96             break;
 97         case 1:
 98             self.noLabel.text = @"2/5";
 99             self.iconView.image = [UIImage imageNamed:@"bingli"];
100             self.descLabel.text = @"亮瞎眼啊";
101             break;
102         case 2:
103             self.noLabel.text = @"3/5";
104             self.iconView.image = [UIImage imageNamed:@"chiniupa"];
105             self.descLabel.text = @"小姑娘吃牛排比杀牛还费劲";
106             break;
107         case 3:
108             self.noLabel.text = @"4/5";
109             self.iconView.image = [UIImage imageNamed:@"danteng"];
110             self.descLabel.text = @"蛋疼";
111             break;
112         case 4:
113             self.noLabel.text = @"5/5";
114             self.iconView.image = [UIImage imageNamed:@"wangba"];
115             self.descLabel.text = @"王八";
116             break;
117     }
118     self.left.enabled = self.index != 0;
119     self.right.enabled = self.index != 4;
120 }
121
122 @end

  这里定义了一个索引index,记录当前的序号.

  这里使用最原始的方法,当用户点击按钮时,首先计算index的值,使用switch结构,选择响应的数据段,将数据加载到相应位置.

  分析代码,发现代码有重复的部分,可以将重复的代码提取出来,封装成一个方法,需要的适合直接调用这个方法.改进方法见下一篇文章.

  此处,我分析一下,最开始程序所提到的功能:首张图片,左侧按钮不能点击;尾张图片,右侧按钮不能点击.想要实现这个功能,我们最容易想到的办法是if-else结构

 1     //判断按钮能不能点击
 2     if (self.index == 0) {
 3         self.previousBtn.enabled = NO;
 4     }else{
 5
 6         self.previousBtn.enabled = YES;
 7     }
 8     if (self.index == 4) {
 9         self.nextBtn.enabled = NO;
10     }else{
11
12         self.nextBtn.enabled = YES;
13     }

  经过分析,发现上面的两个判断语句,可以使用三目运算符来搞定,如下:

self.previousBtn.enabled = (self.index ==0)?NO:YES;
self.nextBtn.enabled = (self.index == 4)?NO:YES;

  本身觉着这样优化之后已经很好了,一行代码就能实现了,但是仔细一看,还是可以优化,如下:

self.previousBtn.enabled = (self.index != 0);
self.nextBtn.enabled = (self.index !=4);

  下一篇文章,我会改进这个代码,将重复性的代码进行封装.

时间: 2024-10-02 02:13:02

UI基础-图片浏览器的相关文章

UI基础-图片浏览器-改进5

上篇文章,我们介绍了使用plist文件加载字典数据,用字典来存储数据,用键值对来存储数据,是NSDictionary类型(坏处:容易写错,不容易调试) 我们可以使用模型来存储数据,也就是将要说的字典转模型. 字典转模型: 字典:用来存储数据,用键值对来存储数据,是NSDictionary类型(坏处:容易写错,不容易调试) 模型:用来存储数据,用属性来存储数据,好处:(有提示,不容易写错) 字典转化成模型:一个字典转换成一个模型,把字典的键值对转换的模型的属性 模型的建立:模型是一个纯洁的obje

UI基础-图片浏览器-改进2

继续改进上面文章中的图片浏览器小案例,将数据放到字典中. 首先了解一下,viewDidLoad方法的作用: @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } @end    在视图加载后被调用: 如果是在代码中创建的视图加载器,他将会在loadView

UI基础-图片浏览器-改进3

本篇文章再次改进图片浏览器小实例. 本篇引入"懒加载"的概念.懒加载(延迟加载),也就是在需要的时候才加载(效率高,占用内存小).所谓懒加载,也就是重写其get方法. 直接附上源码: ViewController.m 1 // 2 // ViewController.m 3 // 01-图片浏览器1 4 // 5 // Created by hukezhu on 15/5/12. 6 // 7 // 8 9 #import "ViewController.h" 10

UI基础-图片浏览器-改进4

上面文章最后引出了plist文件.下面首先介绍一下plist文件. plist全名:Property List,属性列表文件,用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ,因此通常被称为 plist文件.文件是xml格式的. Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息. 下图为图片浏览器实例使用到的plist文件的截图: 我下面介绍一下plist文件的创建过程,首先在Xcode中,点击"Flie"中的New file 或者直接使用快捷键 comm

UI基础-图片浏览器-改进1

上篇文章实现了一个使用UIImageView\UILabel\UIButton实现一个综合的小的图片浏览器,虽然能实现功能,但是代码有很大的问题,这里进行第一次改进:将代码中重复性的代码进行封装,封装成一个方法,用用户点击按钮时,调用点击按钮的响应方法,这个方法中直接调用封装的这个方法. 下面直接上代码,storyboard拖线跟上篇一样,这里不再重复 ViewController.m 1 // 2 // ViewController.m 3 // 01-图片浏览器1 4 // 5 // Cre

IOS-UI基础-图片浏览器

图片浏览器思路 懒加载: 就是重写了数组/字典的 get方法, 到使用的时候才会去分配内存控件 - (NSArray *)dataArray { // 1. 初始化数据 if (nil == _dataArray) { _dataArray = @[ @{@"icon":@"img_01", @"title":@"显示信息1"}, @{@"icon":@"img_02", @"

iOS开发UI基础—简单的浏览器查看程序

iOS开发UI基础-简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边按钮 二.实现基本功能的程序 1 // 2 // YYViewController.m 3 // 03-图片浏览器初步 4 // 5 // Created by apple on 14-5-21. 6 // Copyright (c) 2014年 itcas

iOS基础控件之 图片浏览器

知识准备: UIbutton 和UIimageview的异同: 相同点:> 都能显示图片 不同点:> UIButton默认情况就能监听点击事件,而UIImageView默认情况下不能   > UIButton可以在不同状态下显示不同的图片      > UIButton既能显示文字,又能显示图片 如何选择:> UIButton:需要显示图片,点击图片后需要做一些特定的操作 > UIImageView:仅仅需要显示图片,点击图片后不需要做任何事情 NSArray和NSDi

图片浏览器--UI编程

//  QYViewController.h //  图片浏览器 #import <UIKit/UIKit.h> @interface QYViewController : UIViewController - (IBAction)nightMode:(UISwitch *)sender; - (IBAction)imageSizeChanged:(UISlider *)sender; - (IBAction)setting; - (IBAction)sliderValueChange:(UI