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-MHA集群部署(binlog复制)
			MHA的理论知识网上有很多教程,这里不会说明:仅推荐博客链接! MHA的理论说明:http://www.ywnds.com/?p=8094 MHA的安装包需要在google上面下载,或者就是csdn上 ... 
- Python3 实现(wxpy)用微信自动定时给朋友定时推广
			Python3 实现(wxpy)用微信自动定时给朋友定时推广 安装wxpy 安装微信机器人wxpy非常简单,如果你拥有pip,请直接按照Github中的方法安装: pip install wxpy 实 ... 
- 基于qml创建最简单的图像处理程序(2)-使用c++&qml进行图像处理
			<基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8 ... 
- 20145104张家明 《Java程序设计》第四次实验设计
			20145104张家明 <Java程序设计>第四次实验设计 这第四次实验报告 我们开始着手安卓了 在电脑上安装了安卓虚拟机 
- 20145122《敏捷开发与XP实践 》实验三实验报告
			实验名称 敏捷开发与XP实践 实验内容 1.团队代码要使用git在实验楼中托管,要使用结对同学中的一个同学的账号托管. 2.使用git推送代码并对结对同学的代码修改完成后再git推送. 3.掌握重构流 ... 
- 2018-2019-1 20189218《Linux内核原理与分析》第七周作业
			task_struck数据结构 在Linux内核中,通过task_struct这个结构体对进程进行管理,我们可以叫他PCB或者进程描述符.这个结构体定义在include/linux/sched.h中. ... 
- 20145204《网络对抗》MAL后门原理与实践
			20145204<网络对抗>MAL后门原理与实践 实践内容说明 (1)使用netcat获取主机操作Shell,cron启动 (1分) (2)使用socat获取主机操作Shell, 任务计划 ... 
- 记录Java中对url中的参数进行编码
			Code: import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.u ... 
- 谈谈java中的final关键字
			知识点:final(最终的)关键字修饰类.方法.属性 1.final修饰类:那么这个就无法被继承,如String类.StringBuffer类.System类 2.final修饰方法:被修饰的方法不能 ... 
- for循环,定时器,闭包混合一块的那点事。
			1,对于一个基本的for循环,顺序输出变量值. for(var i = 1; i < 4; i++){ console.log(i);//结果不多说了吧 } 2,如果for循环中有定时器,如下代 ... 
