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)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
随机推荐
- 深入JAVA注解之方法注解
以获取数据库连接为例,建立maven项目 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- HTML5 Chart.js 框架
HTML5 Chart.js 框架 版权声明:未经博主授权,内容严禁转载 ! Chart.js 概述: chart.js 是一个简单的.面向对象.为设计者开发者准备的图表绘制工具. 点击进入官方网址 ...
- 任务调度之Timer与TimerTask配合
什么是任务调度? 在实际业务中,我们经常需要定时.定期.或者多次完成某些任务,对这些任务进行管理,就是任务调度.任务调度与多线程密切相关. 任务调度有多种方式 Timer与TimerTask配合 Ti ...
- Executor简析
本文只做简要解析,实际情形下我们多用spring的taskExecutor 直接使用new Thread()创建线程的缺点: 1.new Thread()耗费性能 2.调用new Thread()创建 ...
- 20145332 拓展:注入shellcode实验
20145332卢鑫 拓展:注入shellcode实验 shellcode基础知识 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外, ...
- mac OSX 实用快捷键
Command + shift + G. 前往文件夹 按键 效果 Shift + option + 音量+/- 以四分之一的刻度加 / 减音量 Shift. + option + 9 ······
- Python3基础 __len__,__getitem__ 记录列表中元素访问的次数 定制不可变序列,下标字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- grep如何结尾匹配
答:grep "jello$" 如:git branch输出以下内容: yes-jello-good yes-jellos yes-jello 那么使用以下命令只能过滤出一行: $ ...
- POJ 3687 Labeling Balls(拓扑排序)题解
Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...
- 【TCP/IP详解 卷一:协议】第二十二章 TCP的坚持定时器
这两章来到了TCP的定时器部分,在 TCP的超时与重传 和 TCP的三握四挥 我们介绍了 TCP的重传定时器 和 TCP的2MSL定时器. 本随笔介绍 防止返回ACK丢失的死锁情况 的 坚持定时器 和 ...