#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简单实现的更多相关文章

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

    iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...

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

    一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边 ...

  3. iOS开发UI篇—Date Picker和UITool Bar控件简单介绍

    iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...

  4. iOS开发UI篇—使用picker View控件完成一个简单的选餐应用

    iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...

  5. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  6. IOS UI篇—UILabel的文字顶部对齐

    UILabel的文字顶部对齐 NOV 20TH, 2011 默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中. 如下图所示(图片来自stackove ...

  7. 查看程序占用tomcat内存情况

    近期,公司线上tomcat常常无缘无辜宕机.总结了一下定位问题的方法,仅供參考: 报错信息: Maximum number of threads (200) created for connector ...

  8. iOS开展UI一片—简单的浏览器观看节目

    iOS开发UI篇-简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 须要读取或改动属性的控件须要设置属性 序号标签 图片 图片描写叙述 左边button 右边button (2 ...

  9. iOS开发UI篇—UIScrollView控件介绍

    iOS开发UI篇—UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...

随机推荐

  1. iotop监控磁盘动态安装

    开始装iotp tar xvf iotop-0.3.1.tar.gz 用python安装(如果没有蟒蛇, yum一个吧) cd iotop-0.3.1 python setup.py build py ...

  2. js验证两次输入的密码是否一致

    原文链接:http://blog.csdn.net/DDfanL/article/details/51460324

  3. STM32唯一的ID

    请看如下程序: /*------------------------------------------------------------------------------------------ ...

  4. 2017.7.4 ACM校内赛 Round 2

    这是一个向导 A - hdu 3652 B - bzoj 4152 C - bzoj 2429 D - bzoj 1087 E - bzoj 1566 F - bzoj 4043 G - bzoj 1 ...

  5. C#工程详解

    转:https://www.cnblogs.com/zhaoqingqing/p/5468072.html 前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为 ...

  6. Python3.5 MySQL 数据库连接

    Python3.5  MySQL 数据库连接 在本文中介绍 Python3 使用PyMySQL连接数据库,并实现简单的增删改查 为什么使用PyMySQL? PyMySQL是在Pyhton3.x版本中用 ...

  7. JQuery使用教程

    jQuery简介 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team jQuery是对原生JavaScript二次封装的工具函数集合 ...

  8. luogu P3387 【模板】缩点

    题目 好久没法博客了 这次就水个板子题目吧 tarjan缩点之后重新建图 而且边权应该都是正的(要不我怎么能这么轻松水过去) 在新图上记忆化一下就好了 f[i] 表示 开头选i这个点 的 路径最大值 ...

  9. gulp介绍及常用插件

    前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nod ...

  10. 51nod 1102 面积最大的矩形(单调栈)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意: 思路: 做法就是求出每个长方形向左向右所能延伸的最大距离. ...