IOS开发学习笔记020-练习总结
自己做了一遍,现在再复习一下,总结一下。
最终效果如下
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-练习总结的更多相关文章
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- ios开发学习笔记(1)
objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...
- iOS开发学习笔记
1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...
- ios开发学习笔记(这里一定有你想要的东西,全部免费)
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- IOS开发学习笔记017-第一个IOS应用
第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...
- (ios开发学习笔记一)ios项目文件结构
转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...
- ios开发学习笔记040-autolayout 第三方框架Masonry
不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...
- IOS开发学习笔记026-UITableView的使用
UITableView的简单使用过程 简单介绍 两种样式 UITableViewStylePlain UITableViewStyleGrouped 数据显示需要设置数据源,数据源是符合遵守协议 &l ...
- IOS开发学习笔记021-练习2
只是简单练习一下,主要是学习里面的思想,处理问题的方法. 不过还有一个问题没想到解决方法. 那就是动态生成的按钮如何绑定按钮事件,请哪位大神指点一下啊.(知道怎么办了,原来是方法addTarget) ...
- IOS开发学习笔记016-Foundation框架
Foundation 框架的学习 一.Foundation 常用结构体 1.NSRange(location,length) typedef struct _NSRange { NSUIntege ...
随机推荐
- LaTeX 符号大全
常用数学符号的 LaTeX 表示方法 2016-10-31 16:22 | 黄荣生 常用数学符号的 LaTeX 表示方法 1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根(squa ...
- 【Mood-13】Android --如何从初级工程师进化为高级工程师
一 明确自我定位 现在你是初级工程师,但是你想当个高级工程师,所 以,你就要给自己定个目标,即:我是要成为高级工程师的男人.有了这个定位,并且努力朝着这个目标去努力,然后内心深处就会有一个感觉,这个 ...
- 微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)
复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1 7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSD ...
- .NET中异常类(Exception)
异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错 ...
- 洛谷 P1077 摆花
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- tomcat服务器配置域名访问项目server.xml
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF ...
- myeclipse引入工程后运行出错
An internal error occurred during: Launching efax on Tomcat 7.x . 项目运行时报错 因为你项目建的时候用的是Tomcat5.x 服务器 ...
- 【洛谷1486】[NOI2004] 郁闷的出纳员(Splay的小运用)
点此看题面 大致题意: 你是一个公司的出纳员,现在有\(n\)个操作,操作有4种:新来一个员工.增加全体员工工资.减少全体员工工资.查询第\(k\)多的工资.若一个员工的工资在某一时刻低于合同上的工资 ...
- Linux学习记录(一)
1.Linux的简介 1.1.Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林 ...
- ASP.NET补充
字典类的子集 using System.Collections.Generic; Dictionary<string, string> dicB = new Dictionary<s ...