iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现
#import "ViewController.h" @interface ViewController () @property (retain, nonatomic) NSArray *pic;
@property (assign, nonatomic) NSInteger index;
@property (weak, nonatomic) IBOutlet UILabel *lblIndex;
@property (weak, nonatomic) IBOutlet UILabel *lblTitle;
@property (weak, nonatomic) IBOutlet UIImageView *picture;
- (IBAction)nextPicture:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *btnnext; - (IBAction)lastPicture:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *btnLast; @end
@implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//让第一个图片显示出来,所以先调用一次
[self nextPicture:nil];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} // 重写pic属性get方法---懒加载数据
- (NSArray *)pic
{ /*
写代码加载picture.plist文件中的数据到_pic;
1.获取picture.plist文件的路径
ps:[NSBundle mainBundle]获取这个app安装到手机上时的根目录
然后在根目录下搜索picture.plist文件路径
*/
if (_pic == nil) {
NSString *string = [[NSBundle mainBundle] pathForResource:@"picture" ofType:@".plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:string];
//NSLog(@"%@",array); _pic = array; }
return _pic;
} - (IBAction)nextPicture:(id)sender {
//1.让索引自加
_index++;
//2.从数组中获取当前这张图片的数据
NSDictionary *dict = self.pic[self.index-];
//3.把获取到得数据设置给界面上的控件
self.lblIndex.text = [NSString stringWithFormat:@"%ld/%ld",self.index,self.pic.count];
//4.通过image属性来设置图片框里面的图片
self.picture.image =[UIImage imageNamed: dict[@"picture"]]; self.lblTitle.text = dict[@"title"];
//设置“下一张”按钮是否可以点击
self.btnnext.enabled =( _index != self.pic.count);
//设置“上一张”按钮是否可以点击
self.btnLast.enabled =( _index- != ); } - (IBAction)lastPicture:(id)sender {
_index--;
NSDictionary *dict = self.pic[self.index-];
self.lblIndex.text = [NSString stringWithFormat:@"%ld/%ld",self.index,self.pic.count];
self.picture.image =[UIImage imageNamed: dict[@"picture"]];
self.lblTitle.text = dict[@"title"]; self.btnLast.enabled =( _index- != );
self.btnnext.enabled =( _index != self.pic.count);
}
@end
开发思路:
1.完成基本功能
2.考虑性能
(1)(初始化操作,可以直接调用change进行)
(2)因为要控制序号和图片两个变量,所以考虑使用字典代替掉switch
(3)每次点击,字典都需要创建一次,效率地下,可以考虑创建的这部分拿到初始化方法中去,这样就只需要创建一次就ok了。
(4)考虑缺点(对代码的顺序要求极其严格)
(5)懒加载(需要的时候才加载,那么什么时候是需要的时候,及调用get方法的时候)
(6)每次都来一下?效率低下—》只有第一次调用get方法时为空,此时实例化并建立数组,其他时候直接返回成员变量(仅仅执行一次)
注意点:
1.方法的调用堆栈(顺序)。
2.使用plist:让数据的操作更加灵活,把数据弄到外面去,解除耦合性,让耦合性不要太强。实际上是一个xml,是苹果定义的一种特殊格式的xml。
3.bundle-包(只读)
二、Tomcat简单实现(吃小鸟)
- (IBAction)eatBird:(id)sender { [self startAnimating: picName:@"cat_eat"];
} - (void)startAnimating:(int)count picName:(NSString *)picName
{
// 如果当前图片框正在执行动画,那么直接return,什么也不做
if (self.imageViewCat.isAnimating) {
return;
}
// 1.加载图片到数组中
NSMutableArray *array = [NSMutableArray array];
for (int i=; i<count; i++) {
// 拼接图片名称
NSString *imagName = [NSString stringWithFormat:@"%@%04d.jpg",picName,i];
/*
根据图片名称加载图片
通过imageNamed:这种方式加载图片,加载好的图片会一直保存写在内存中,不会释放。
优点:下次如果再使用同样的图片时就不需要重新加载了,因为内存也已有
缺点:如果加载大量的图片,那么这些图片会一直保存在内存中,导致应用程序占用内存过大(这叫缓存)
//UIImage *imageCat = [UIImage imageNamed:imagName];
*/ // 解决:换一种加载图片的方式,不需要使用缓存
// 获取图片完整的路径
NSString *path = [[NSBundle mainBundle] pathForResource:imagName
ofType:nil];
// 这里的参数不能传递图片名称了,这里需要传递图片的完整路径
UIImage *imageCat = [UIImage imageWithContentsOfFile:path]; // 把图片加载到数组中
[array addObject:imageCat];
}
// 2.设置图片的UIImageView(图片框)的animationimage属性
self.imageViewCat.animationImages = array;
// 3.设置动画持续时间
self.imageViewCat.animationDuration = self.imageViewCat.animationImages.count * 0.1; // 4.设置动画是否重播
self.imageViewCat.animationRepeatCount = ;
// 5.开启动画
[self.imageViewCat startAnimating]; /*
清空图片集合
这样写的问题是,当动画启动以后,动画还没有执行,就已经让图片集合清空了,也就是说
self.imageViewCat.animationImages里面已经没有图片了,所以动画就不执行了。
self.imageViewCat.animationImages = nil;
想法:需要延迟一段时间执行,当动画执行完毕后再清空这些图片
*/ //设置图片框在调用setAnimationImages:nil方法的时候延迟执行
[self.imageViewCat performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageViewCat.animationImages.count*0.1];
}
iOS-UI篇—简单的浏览器查看程序和Tomcat简单实现的更多相关文章
- iOS开发UI篇—简单的浏览器查看程序
iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...
- iOS开发UI篇——简单的浏览器查看程序
一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边 ...
- iOS开发UI篇—Date Picker和UITool Bar控件简单介绍
iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...
- iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
- IOS UI篇—UILabel的文字顶部对齐
UILabel的文字顶部对齐 NOV 20TH, 2011 默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中. 如下图所示(图片来自stackove ...
- 查看程序占用tomcat内存情况
近期,公司线上tomcat常常无缘无辜宕机.总结了一下定位问题的方法,仅供參考: 报错信息: Maximum number of threads (200) created for connector ...
- iOS开展UI一片—简单的浏览器观看节目
iOS开发UI篇-简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 须要读取或改动属性的控件须要设置属性 序号标签 图片 图片描写叙述 左边button 右边button (2 ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
随机推荐
- ”MySQL查询优化“学习总结
查询优化有几种方法,下面分别介绍. 切分查询 一条大的语句(涉及很多行)一次会锁住很多数据(不利于高并发). 占满整个事务日志,耗尽系统资源.阻塞很多小的但很重要的查询. 分解关联查询 关联查询分解方 ...
- 04: 打开tornado源码剖析处理过程
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 torn ...
- RAM,ROM,NAND Flash,NOR Flash(A)
他们四者相互独立 RAM掉电易失数据: RAM又分两种,一种是静态RAM,SRAM:一种是动态RAM,DRAM.前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM. DDR是Doubl ...
- bzoj 2118 墨墨的等式 - 图论最短路建模
墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input ...
- 日志统计|2018年蓝桥杯B组题解析第八题-fishers
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- 怎么在VS监视DataSet类型的数据
旧版本 先监视DataSet,打开dataset,dataset下面有一个tablesTables打开有一个非公共成员,然后下面有一个List,List中存储了每一张表的信息 下图所示的List下面的 ...
- UVa 1605 联合国大楼
https://vjudge.net/problem/UVA-1605 题意:有n个国家,要求设计一栋楼并为这n个国家划分房间,要求国家的房间必须连通,且每两个国家之间必须有一间房间是相邻的. 思路: ...
- LR学习资料
http://ajita.iteye.com/blog/1728243/ 选择哪种方式录制,有以下参考原则: 1 基于浏览器的应用程序推荐使用HTML-based Script 2 不是基于浏览器的应 ...
- jquery扩展的两个方法与区别 $.extend $.fn.extend
jQuery.extend:Query本身的扩展方法 jQuery.fn.extent(Object) jquery 所选对象扩展方法 jQuery.extend 我们先把jQuery看成了一个类,这 ...
- linux 多进程fork
对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判定fork函数的返回值,就知道自己是处于父进程还是子进程中.