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

简介:

一、程序实现要求

1.要求

2. 界面分析

(1) 需要读取或修改属性的控件需要设置属性

序号标签

图片

图片描述

左边按钮

右边按钮

(2) 需要监听响应事件的对象,需要添加监听方法

左边按钮

右边按钮

二、实现基本功能的程序


//
// YYViewController.m
// 03-图片浏览器初步
//
// Created by apple on 14-5-21.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

#define POTOIMGW 200
#define POTOIMGH 300
#define POTOIMGX 60
#define POTOIMGY 50


@interface YYViewController ()

//变量声明!
@property(nonatomic,strong)UILabel *firstlab;
@property(nonatomic,strong)UILabel *lastlab;
@property(nonatomic,strong)UIImageView *icon;
@property(nonatomic,strong)UIButton *leftbtn;
@property(nonatomic,strong)UIButton *rightbtn;

-(void)change;
@property(nonatomic ,assign)int i;
@end

@implementation YYViewController

- (void)viewDidLoad
{
 [super viewDidLoad];
 self.i=0;
 //创建一个用来显示序号的lable控件
 UILabel *headlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
 
 // [headlab setText:@"1/5"];
 [headlab setTextAlignment:NSTextAlignmentCenter];
 [headlab setTextColor:[UIColor blackColor]];
 
 [self.view addSubview:headlab];
 self.firstlab=headlab;
 
 
 
 //创建一个装载图片的控件
 UIImageView *potoimg=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
 
 UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
 potoimg.image=image;
 
 [self.view addSubview:potoimg];
 self.icon=potoimg;
 
 
 
 //创建最下边的描述图片的lable控件
 UILabel *desclab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
 // [desclab setText:@"表情弱爆了!"];
 [desclab setTextAlignment:NSTextAlignmentCenter];
 [self.view addSubview:desclab];
 self.lastlab=desclab;
 
 
 //创建两个方向键按钮
 //设置为自定义类型
 //1.使用类创建对象
 UIButton *leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 //2.设置对象的属性(不要忘记设置坐标)
 leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
 
 //3.提交对象到视图
 [self.view addSubview:leftbtn];
 
 self.leftbtn=leftbtn;
 [leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
 
 
 UIButton *rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
 
 [self.view addSubview:rightbtn];
 
 self.rightbtn=rightbtn;
 [rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
 
 //这是一个初始化方法,调用change可以完成初始化的工作
 [self change];
}

-(void)change
{
 [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
 switch (self.i) {
 case 0:
 self.lastlab.text=@"什么表情都弱爆了!";
 self.icon.image=[UIImage imageNamed:@"biaoqingdi"];
 break;
 case 1:
 self.lastlab.text=@"病例";
 self.icon.image=[UIImage imageNamed:@"bingli"];
 break;
 case 2:
 self.lastlab.text=@"王八";
 self.icon.image=[UIImage imageNamed:@"wangba"];
 break;
 case 3:
 self.lastlab.text=@"吃牛扒";
 self.icon.image=[UIImage imageNamed:@"chiniupa"];
 break;
 case 4:
 self.lastlab.text=@"蛋疼!";
 self.icon.image=[UIImage imageNamed:@"danteng"];
 break;
 }
 //控制按钮的点击,如果为5则右键失效,如果为1,则左键失效
 self.leftbtn.enabled=(self.i!=0);
 self.rightbtn.enabled=(self.i!=4);

}

//向右按键
-(void)rightclick:(UIButton *)btn
{
 self.i++;
 [self change];
 //NSLog(@"点我了");
}
-(void)leftclick:(UIButton *)btn
{
 self.i--;
 [self change];
}
- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
}

@end

三、程序优化


//
// YYViewController.m
// 03-图片浏览器初步
//
// Created by apple on 14-5-21.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

#define POTOIMGW 200
#define POTOIMGH 300
#define POTOIMGX 60
#define POTOIMGY 50


@interface YYViewController ()

//变量声明!
@property(nonatomic,strong)UILabel *firstlab;
@property(nonatomic,strong)UILabel *lastlab;
@property(nonatomic,strong)UIImageView *icon;
@property(nonatomic,strong)UIButton *leftbtn;
@property(nonatomic,strong)UIButton *rightbtn;

@property(nonatomic,strong)NSArray *array;

-(void)change;
@property(nonatomic ,assign)int i;
@end

@implementation YYViewController

- (void)viewDidLoad
{
 [super viewDidLoad];
 self.i=0;
 //创建一个用来显示序号的lable控件
 UILabel *headlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
 
 // [headlab setText:@"1/5"];
 [headlab setTextAlignment:NSTextAlignmentCenter];
 [headlab setTextColor:[UIColor blackColor]];
 
 [self.view addSubview:headlab];
 self.firstlab=headlab;
 
 
 
 //创建一个装载图片的控件
 UIImageView *potoimg=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
 
 UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
 potoimg.image=image;
 
 [self.view addSubview:potoimg];
 self.icon=potoimg;
 
 
 
 //创建最下边的描述图片的lable控件
 UILabel *desclab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
 // [desclab setText:@"表情弱爆了!"];
 [desclab setTextAlignment:NSTextAlignmentCenter];
 [self.view addSubview:desclab];
 self.lastlab=desclab;
 
 
 
 //创建两个方向键按钮
 //设置为自定义类型
 //1.使用类创建对象
 UIButton *leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 //2.设置对象的属性(不要忘记设置坐标)
 leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
 
 //3.提交对象到视图
 [self.view addSubview:leftbtn];
 
 self.leftbtn=leftbtn;
 [leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
 
 
 UIButton *rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
 
 [self.view addSubview:rightbtn];
 
 self.rightbtn=rightbtn;
 [rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
 //放在这里的话,只会创建一次,但是这个部分和[self change];部分有很严格的顺序要求,并不人性化,可以考虑使用懒加载特性
// NSDictionary *dict1=@{@"name": @"biaoqingdi",@"desc":@"什么表情都弱爆了!"};
// NSDictionary *dict2=@{@"name": @"bingli",@"desc":@"病例"};
// NSDictionary *dict3=@{@"name": @"wangba",@"desc":@"乌龟"};
// NSDictionary *dict4=@{@"name": @"chiniupa",@"desc":@"吃牛扒"};
// NSDictionary *dict5=@{@"name": @"danteng",@"desc":@"蛋疼"};
// 
// self.array=@[dict1,dict2,dict3,dict4,dict5];
 //这是一个初始化方法,调用change可以完成初始化的工作
 [self change];
}

-(void)change
{
 //每次调用都需要创建?有没有什么解决办法?
// NSDictionary *dict1=@{@"name": @"biaoqingdi",@"desc":@"什么表情都弱爆了!"};
// NSDictionary *dict2=@{@"name": @"bingli",@"desc":@"病例"};
// NSDictionary *dict3=@{@"name": @"wangba",@"desc":@"乌龟"};
// NSDictionary *dict4=@{@"name": @"chiniupa",@"desc":@"吃牛扒"};
// NSDictionary *dict5=@{@"name": @"danteng",@"desc":@"蛋疼"};
// 
// NSArray *array=@[dict1,dict2,dict3,dict4,dict5];
 
 
 //设置照片
 //先根据self.i取出数组中的元素,再取出元素(字典)中键值对应的值
// self.icon.image=[UIImage imageNamed:array[self.i][@"name"]];
// self.lastlab.text=array[self.i][@"desc"];
 // NSLog(@"%@",array[self.i][@"desc"]);
 
 self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];
 self.lastlab.text=self.array[self.i][@"desc"];
 
 [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
 
// switch (self.i) {
// case 0:
// self.lastlab.text=@"什么表情都弱爆了!";
// self.icon.image=[UIImage imageNamed:@"biaoqingdi"];
// break;
// case 1:
// self.lastlab.text=@"病例";
// self.icon.image=[UIImage imageNamed:@"bingli"];
// break;
// case 2:
// self.lastlab.text=@"王八";
// self.icon.image=[UIImage imageNamed:@"wangba"];
// break;
// case 3:
// self.lastlab.text=@"吃牛扒";
// self.icon.image=[UIImage imageNamed:@"chiniupa"];
// break;
// case 4:
// self.lastlab.text=@"蛋疼!";
// self.icon.image=[UIImage imageNamed:@"danteng"];
// break;
// }
 //控制按钮的点击,如果为5则右键失效,如果为1,则左键失效
 self.leftbtn.enabled=(self.i!=0);
 self.rightbtn.enabled=(self.i!=4);

}

//array的get方法
-(NSArray *)array
{
 NSLog(@"需要获取数组");
 //只实例化一次
 if (_array==nil) {
 NSLog(@"实例化数组");
 NSDictionary *dict1=@{@"name": @"biaoqingdi",@"desc":@"什么表情都弱爆了!"};
 NSDictionary *dict2=@{@"name": @"bingli",@"desc":@"病例"};
 NSDictionary *dict3=@{@"name": @"wangba",@"desc":@"乌龟"};
 NSDictionary *dict4=@{@"name": @"chiniupa",@"desc":@"吃牛扒"};
 NSDictionary *dict5=@{@"name": @"danteng",@"desc":@"蛋疼"};
 _array=@[dict1,dict2,dict3,dict4,dict5];
 }
// NSDictionary *dict1=@{@"name": @"biaoqingdi",@"desc":@"什么表情都弱爆了!"};
// NSDictionary *dict2=@{@"name": @"bingli",@"desc":@"病例"};
// NSDictionary *dict3=@{@"name": @"wangba",@"desc":@"乌龟"};
// NSDictionary *dict4=@{@"name": @"chiniupa",@"desc":@"吃牛扒"};
// NSDictionary *dict5=@{@"name": @"danteng",@"desc":@"蛋疼"};
 
 // _array=@[dict1,dict2,dict3,dict4,dict5];
 return _array;
}

//向右按键
-(void)rightclick:(UIButton *)btn
{
 self.i++;
 [self change];
}

//向左按键
-(void)leftclick:(UIButton *)btn
{
 self.i--;
 [self change];
}


- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
}

@end

说明:

1> 定义控件属性,注意:属性必须是strong的,示例代码如下:

@property (nonatomic, strong) UIImageView *icon;

2> 在属性的getter方法中实现懒加载,示例代码如下:


- (UIImageView *)icon

{

 if (!_icon) {

 // 计算位置参数

 CGFloat imageW = 200;

 CGFloat imageX = (320 - imageW) / 2;

 CGFloat imageH = 200;

 CGFloat imageY = 80;

 // 实例化图像视图

 _icon = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, imageW, imageH)];

 // 将图像视图添加到主视图

 [self.view addSubview:_icon];

 }

 return _icon;

}

四、使用plist文件

(1)使用Plist文件的目的:将数据与代码分离

(2)加载方法:

NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];

_imageList = [NSArray arrayWithContentsOfFile:path];

提示:通常在方法中出现File字眼,通常需要传递文件的全路径作为参数

(3)代码示例


//
// YYViewController.m
// 03-图片浏览器初步
//
// Created by apple on 14-5-21.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

#define POTOIMGW 200
#define POTOIMGH 300
#define POTOIMGX 60
#define POTOIMGY 50


@interface YYViewController ()

//变量声明!
@property(nonatomic,strong)UILabel *firstlab;
@property(nonatomic,strong)UILabel *lastlab;
@property(nonatomic,strong)UIImageView *icon;
@property(nonatomic,strong)UIButton *leftbtn;
@property(nonatomic,strong)UIButton *rightbtn;

@property(nonatomic,strong)NSArray *array;

-(void)change;
@property(nonatomic ,assign)int i;
@end

@implementation YYViewController

- (void)viewDidLoad
{
 [super viewDidLoad];
 self.i=0;
 //创建一个用来显示序号的lable控件
 UILabel *headlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
 
 // [headlab setText:@"1/5"];
 [headlab setTextAlignment:NSTextAlignmentCenter];
 [headlab setTextColor:[UIColor blackColor]];
 
 [self.view addSubview:headlab];
 self.firstlab=headlab;
 
 
 
 //创建一个装载图片的控件
 UIImageView *potoimg=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
 
 UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
 potoimg.image=image;
 
 [self.view addSubview:potoimg];
 self.icon=potoimg;
 
 //创建最下边的描述图片的lable控件
 UILabel *desclab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
 // [desclab setText:@"表情弱爆了!"];
 [desclab setTextAlignment:NSTextAlignmentCenter];
 [self.view addSubview:desclab];
 self.lastlab=desclab;
 
 
 //创建两个方向键按钮
 //设置为自定义类型
 //1.使用类创建对象
 UIButton *leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 //2.设置对象的属性(不要忘记设置坐标)
 leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
 
 //3.提交对象到视图
 [self.view addSubview:leftbtn];
 
 self.leftbtn=leftbtn;
 [leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
 
 
 UIButton *rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 
 rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
 
 [self.view addSubview:rightbtn];
 
 self.rightbtn=rightbtn;
 [rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
 [self change];
}

-(void)change
{
 self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];
 self.lastlab.text=self.array[self.i][@"desc"];
 
 [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
 
 self.leftbtn.enabled=(self.i!=0);
 self.rightbtn.enabled=(self.i!=4);

}

//array的get方法
-(NSArray *)array
{
 NSLog(@"需要获取数组");
 //只实例化一次
 if (_array==nil) {
 
 NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
 //数组的数据从文件获取
 // _array=[NSArray arrayWithContentsOfFile:path];
 _array=[[NSArray alloc]initWithContentsOfFile:path];
 //打印查看包的位置
 NSLog(@"%@",path);
 
 NSLog(@"实例化数组");
 }

 return _array;
}

//向右按键
-(void)rightclick:(UIButton *)btn
{
 self.i++;
 [self change];
}

//向左按键
-(void)leftclick:(UIButton *)btn
{
 self.i--;
 [self change];
}

- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
}

@end

(4)plist文件

(5)实现效果

五、补充

开发思路:

1.完成基本功能

2.考虑性能

(1)(初始化操作,可以直接调用change进行)

(2)因为要控制序号和图片两个变量,所以考虑使用字典代替掉switch

(3)每次点击,字典都需要创建一次,效率地下,可以考虑创建的这部分拿到初始化方法中去,这样就只需要创建一次就ok了。

(4)考虑缺点(对代码的顺序要求极其严格)

(5)懒加载(需要的时候才加载,那么什么时候是需要的时候,及调用get方法的时候)

(6)每次都来一下?效率低下—》只有第一次调用get方法时为空,此时实例化并建立数组,其他时候直接返回成员变量(仅仅执行一次)

注意点:

1.方法的调用堆栈(顺序)。

2.使用plist:让数据的操作更加灵活,把数据弄到外面去,解除耦合性,让耦合性不要太强。实际上是一个xml,是苹果定义的一种特殊格式的xml。

3.bundle-包(只读)

目录
相关文章
|
2月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
|
22天前
|
JavaScript 前端开发 开发工具
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
|
21天前
|
前端开发 JavaScript
vue3【实战】创建项目、创建并提交代码到远程仓库,安装 SASS, 清除浏览器默认样式 reset-css, 清除模板代码,提升开发效率的必要集成
vue3【实战】创建项目、创建并提交代码到远程仓库,安装 SASS, 清除浏览器默认样式 reset-css, 清除模板代码,提升开发效率的必要集成
26 0
|
22天前
|
Web App开发 编解码
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
|
1月前
|
数据可视化 安全 区块链
区块链钱包浏览器开发功能,价格和时间周期
开发区块链钱包浏览器涉及账户管理、交易查询、区块浏览、智能合约查询及数据可视化等功能。价格因开发难度、需求、团队专业度及第三方服务费用而异,通常在数万至数百万元。开发周期约数月到半年,包括需求分析、设计、开发、测试和上线等阶段。
区块链钱包浏览器开发功能,价格和时间周期
|
2月前
|
开发工具 开发者
谷歌浏览器打开DWG图纸,实现圆转多边形功能(在线CAD开发教程)
本文介绍了如何使用在线CAD SDK实现圆转多边形功能。首先,需搭建绘图环境和添加命令行交互。接着,通过mxcad库,根据用户输入的边数实现两种转换方式:内接于圆(目标圆为多边形外接圆)和外切于圆(目标圆为多边形内切圆)。具体实现包括选中圆、获取边数、选择转换方式,然后根据用户选择绘制多边形。最终展示了转换效果。
谷歌浏览器打开DWG图纸,实现圆转多边形功能(在线CAD开发教程)
|
2月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
113 0
|
2月前
|
Web App开发 JSON 前端开发
6款开发必备的Chrome谷歌浏览器扩展(部分火狐、edge浏览器商店也可以用)
6款开发必备的Chrome谷歌浏览器扩展(部分火狐、edge浏览器商店也可以用)
74 0
|
2月前
|
Web App开发 移动开发 Android开发
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题
解决IOS Safari浏览器H5页面上下滑动时卡顿、页面缺失的问题
|
7月前
|
Web App开发 JavaScript 前端开发
如何使用浏览器自动化框架Playwright开发“万媒易发”实现多平台自动发布文章?
作为一名程序员和开发者,我深知在多个媒体平台手动发布和管理文章的痛苦。因此,我决定使用Playwright浏览器自动化框架,开发一款名为“万媒易发”的工具,实现多平台自动发布文章。下面我将分享这款工具的开发过程和成果,希望能对大家有所启发和帮助。