自己做了一遍,现在再复习一下,总结一下。

最终效果如下

       

1、新建一个工程Single View Application

总体如下

不过要关闭自动布局功能

这是按下设置按钮显示的界面
默认是隐藏的,可以在设置时改变坐标显示出来,之后在隐藏

关于导入图片:

  可以新建一个组,将图片拖拽到文件夹里。

给各个组件设置默认值,这里准备的时16张图片,所以都是按16张算得

  顶部默认是1/16

  滑动条是0到15,默认是0

  图片默认显示 0.png

2、然后给各个需要的控件添加属性和监听事件

如下:

 #import <UIKit/UIKit.h>

 @interface SLQViewController : UIViewController
- (IBAction)sliderValueChanged:(UISlider *)slider; // 滑动条-改变图显示顺序的监听事件
@property (weak, nonatomic) IBOutlet UIImageView *imageView; // 图片显示对象
@property (weak, nonatomic) IBOutlet UILabel *imageNum; // 顶部图片显示的顺序
@property (weak, nonatomic) IBOutlet UILabel *imageInfo; // 底部图片的描述信息
@property (weak, nonatomic) IBOutlet UIView *settingView; // 设置界面
- (IBAction)setting:(id)sender; // 设置按钮监听事件
- (IBAction)imageSizeChange:(UISlider *)sender;// 设置界面改变图片大小的监听事件
- (IBAction)nightModel:(UISwitch *)sender;// 设置界面switch按钮的监听事件 @end

3、主界面代码实现

  1、先让顶部的lable标签随滚动条值的改变而改变

  这里定义的又 imageNum 属性来控制lable标签。还有滑动条的监听事件 imageSizeChange

  首先获取滑动条改变值,然后设置要显示在 imageNum 的信息。

    // 设置显示第几张, %.f 不保存任何小数,因为是从0开始的,所以显示要加1
_imageNum.text = [NSString stringWithFormat:@"%.f/16",slider.value + ];

  随着滑动条的拖拽,imageNum 的值一直在改变。

  2、接着显示图片  imageView

  首先获取滑动条改变值,然后设置要显示在 imageView 的信息。

     // 设置中间的图片
// 获得文件名 %.f 不保存任何小数,图片的编号是从0开始的,直接取就行
NSString *name = [NSString stringWithFormat:@"%.f.png",slider.value]; //
4   _imageView.image = [UIImage imageNamed:name]; // 设置要显示的图片到控件

  随着滑动条的拖拽,图片 的值一直在改变。注意观察和顶部文字顺序是否一致。

  3、显示图片的文字描述信息iamgeInfo

  因为有十几张图片的描述信息,所以我们使用plist来保存文字信息。然后通过代码读取文件获得信息。

  首先新建一个plist文件

  

  然后选择类型为数组,点击加号添加条目

  

  添加结果如下

  

  现在就来读取这个plist文件,需要使用到一个类 NSBundle,获取主程序的全路径

  NSBundle 会获取主程序的安装目录,可以读取下面的配置文件。使用方式如下:
     // 如果要访问资源包中得所有资源,可以通过这个类访问,
NSBundle *bundle = [NSBundle mainBundle];
// 获取全路径
NSString *path = [bundle pathForResource:@"desc" ofType:@"plist"];
// 加载所有描述
_array= [NSArray arrayWithContentsOfFile:path];

  其中_array 是定义的一个NSArray数组的属性,用来保存文字描述信息

  又因为这个文字描述从读取出来后一直没有改变,所以把它的读取放在 viewDidLoad 方法中。

  viewDidLoad方法会在主界面加载后执行,并且只会执行一次。

  读取文件如下

 - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 设置描述
// 如果要访问资源包中得所有资源,可以通过这个类访问,
NSBundle *bundle = [NSBundle mainBundle];
// 获取全路径
NSString *path = [bundle pathForResource:@"desc" ofType:@"plist"];
// 加载所有描述
_array= [NSArray arrayWithContentsOfFile:path];
_imageInfo.text = _array[]; // 设置默认显示描述
}

  设置要显示的描述 改变imageInfo控件的text属性的值

     // 设置描述,因为slider.value是按浮点值进行改变的,强制转换成int型要进行四舍五入1.40-> 1,但是如果加0.5就会改善这种误差
int index = (int)(slider.value + 0.5); // +0.5是为了消除强制转换的四舍五入所
_imageInfo.text = _array[index]; // 设置显示描述

4、设置界面的实现 settingView

  1、实现按下弹出,再次按下隐藏

  首先在main.storyboard界面将settingView隐藏起来,将坐标改到刚好隐藏到底部。我这里设置的y坐标是480  

 - (IBAction)setting:(id)sender
{
// 动画开始
[UIView beginAnimations:nil context:nil];
// 设置动画时间
[UIView setAnimationDuration:0.5];
// 取出中点,现在是隐藏状态的中点
CGPoint center = _settingView.center; // 修改y值,如果要_settingView的y坐标值和整个主界面的高度相同,那么就没显示到主界面中
if (_settingView.frame.origin.y == self.view.frame.size.height) // 没出现就弹出
{
center.y -= _settingView.bounds.size.height; // _settingView的y值减去自身的高度,那么可将界面显示到主界面
}
else
{
center.y += _settingView.bounds.size.height; // 已经出现就隐藏
}
// 重新赋值
_settingView.center = center;
// 执行动画
[UIView commitAnimations];
}

  2、夜间模式实现

  这里实现的比较简单,知识改变主界面的背景色

 - (IBAction)nightModel:(UISwitch *)sender
{
if (!sender.on) // 如果开关关闭就显示白色
{
self.view.backgroundColor = [UIColor whiteColor]; // 关闭--背景显示白色 }
else // 否则显示灰色
self.view.backgroundColor = [UIColor darkGrayColor]; // 打开--背景显示灰色
}

  3、图片大小改变

  这里直接改变图片控件的transform属性

 - (IBAction)imageSizeChange:(UISlider *)sender
{
// transform 属性修改
_imageView.transform = CGAffineTransformMakeScale(sender.value, sender.value);
}

整个 SLQViewController.m文件如下:

 //
// SLQViewController.m
// 图片浏览器
//
// Created by Christian on 15/4/25.
// Copyright (c) 2015年 itcast. All rights reserved.
// #import "SLQViewController.h" @interface SLQViewController ()
{
NSArray *_array; // 保存文字描述信息
} @end @implementation SLQViewController - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 3、设置描述
// 如果要访问资源包中得所有资源,可以通过这个类访问,
NSBundle *bundle = [NSBundle mainBundle];
// 获取全路径
NSString *path = [bundle pathForResource:@"desc" ofType:@"plist"];
// 加载所有描述
_array= [NSArray arrayWithContentsOfFile:path];
_imageInfo.text = _array[]; // 设置默认显示描述
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (IBAction)sliderValueChanged:(UISlider *)slider
{
// 1、设置中间的图片
// 获得文件名 %.f 不保存任何小数
NSString *name = [NSString stringWithFormat:@"%.f.png",slider.value];
_imageView.image = [UIImage imageNamed:name];
// 2、设置显示第几张
_imageNum.text = [NSString stringWithFormat:@"%.f/16",slider.value + ];
// 3、设置描述
int index = (int)(slider.value + 0.5); // +0.5是为了消除强制转换的四舍五入所
_imageInfo.text = _array[index]; // NSLog(@"%d",index); }
- (IBAction)setting:(id)sender
{
// 动画开始
[UIView beginAnimations:nil context:nil];
// 设置动画时间
[UIView setAnimationDuration:0.5];
// 取出中点,现在是隐藏状态的中点
CGPoint center = _settingView.center; // 修改y值,如果要_settingView的y坐标值和整个主界面的高度相同,那么就没显示到主界面中
if (_settingView.frame.origin.y == self.view.frame.size.height) // 没出现就弹出
{
center.y -= _settingView.bounds.size.height; // _settingView的y值减去自身的高度,那么可将界面显示到主界面
}
else
{
center.y += _settingView.bounds.size.height; // 已经出现就隐藏
}
// 重新赋值
_settingView.center = center;
// 执行动画
[UIView commitAnimations];
} - (IBAction)imageSizeChange:(UISlider *)sender
{
// transform 属性修改
_imageView.transform = CGAffineTransformMakeScale(sender.value, sender.value);
} - (IBAction)nightModel:(UISwitch *)sender
{
if (!sender.on) // 如果开关关闭就显示白色
{
self.view.backgroundColor = [UIColor whiteColor]; // 关闭--背景显示白色 }
else // 否则显示灰色
self.view.backgroundColor = [UIColor darkGrayColor]; // 打开--背景显示灰色
} @end

整个过程大概就是这样,每天进步一点点。

IOS开发学习笔记020-练习总结的更多相关文章

  1. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  2. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  3. iOS开发学习笔记

    1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...

  4. ios开发学习笔记(这里一定有你想要的东西,全部免费)

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  5. IOS开发学习笔记017-第一个IOS应用

    第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...

  6. (ios开发学习笔记一)ios项目文件结构

    转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...

  7. ios开发学习笔记040-autolayout 第三方框架Masonry

    不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...

  8. IOS开发学习笔记026-UITableView的使用

    UITableView的简单使用过程 简单介绍 两种样式 UITableViewStylePlain UITableViewStyleGrouped 数据显示需要设置数据源,数据源是符合遵守协议 &l ...

  9. IOS开发学习笔记021-练习2

    只是简单练习一下,主要是学习里面的思想,处理问题的方法. 不过还有一个问题没想到解决方法. 那就是动态生成的按钮如何绑定按钮事件,请哪位大神指点一下啊.(知道怎么办了,原来是方法addTarget) ...

  10. IOS开发学习笔记016-Foundation框架

     Foundation 框架的学习 一.Foundation 常用结构体 1.NSRange(location,length)  typedef struct _NSRange { NSUIntege ...

随机推荐

  1. IOS 控件器的创建方式(ViewController)

    ● 控制器常见的创建方式有以下几种 ➢ 通过storyboard创建 ➢ 直接创建 NJViewController *nj = [[NJViewController alloc] init]; ➢ ...

  2. Codeforces Round #327 (Div. 2) C Median Smoothing(找规律)

    分析: 三个01组合只有八种情况: 000 s001 s010 0011 s100 s101 1110 s111 s 可以看出只有010,101是不稳定的.其他都是稳定的,且连续地出现了1或0,标记为 ...

  3. hdu-1532 Drainage Ditches---最大流模板题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 给出有向图以及边的最大容量,求从1到n的最大流 思路: 传送门:最大流的增广路算法 ...

  4. 【转】Web实时通信之Socket.IO ,真正的兼容ie

    前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序. 但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比 ...

  5. IBM MQ Explore使用

    一,版本说明: 系统:win10.MQ:V9.04 二.关于帮助文档: 1.读了差不多一大半,个人感觉说明的比较生僻,应该是直译过来的.但是还是可以从这里面学一下基本的操作. 2.对于一些基本的操作, ...

  6. Oracle 数字处理函数

    数字处理函数 ① mod(number1,number2) 取余数的函数,比如mod(10,3) = 10/3 = 1. ② round(number,num_ditigs) .trunk(numbe ...

  7. jfinal excel表导出

    在自己的WEB项目中要用到导出Excel,所以结合网络上的资源写了一个自己的export 工具类. 说明: JFinal 环境 WEB项目 JAVA后台生成非JS插件 好了,直接撸代码 1.设置文件保 ...

  8. 三十一、MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  9. 二、MySQL 管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  10. 1.在Cisco Packet Tracer里交换机的初始配置

    基本拓扑图: 点进交换机,会先进入交换机的用户模式,这个模式下交换机的名称后方会以‘>’显示 输入enable会进入交换机的特权模式,同样在交换机的名称后方以‘#’显示 在特权模式的环境下输入c ...