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 ...
随机推荐
- Android中intent相关,setFlag(xx);
intent.setFlags(参数)://参数用法如下 :FLAG_ACTIVITY_CLEAR_TOP: 例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个intent ...
- Android 应用开机自启和无需权限开启悬浮框
开机自启主要自定义广播接收类,且需要在清单文件中注册,不要在代码中动态注册. <uses-permission android:name="android.permission.REC ...
- ArcGIS中Features与JSON的互相转化
实际操作过程非常简单,这里就简单记录下转换工具的位置:
- OpenCV之CvMat、Mat、IplImage之间相互转换实例(转)
OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数.初学者应该掌握并熟练应用.但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能 ...
- EF写统计
EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联, 在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计, 例如SQL: -- ...
- Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)
1. 首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.Lis ...
- 如何解决linux下apache启动时httpd: apr_sockaddr_info_get() failed for 报错
今天在家里的RHLE5.5上安装apache的时候,先用user1用户./configure命令配置,然后才用root用户make && make install,结果apache起来 ...
- 制作带复选框的ListView控件
实现效果: 知识运用 ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes ...
- 2018.5.25 Oracle相关的函数命令
第03章 函数 1 Oracle的函数 Oracle的函数和java中的方法一样, 能完成一定的功能 2 字符处理类函数 --需求1:把ename字段转换成小写 select lower(ename) ...
- LuceneTest
/** * Created by mhm on 2019/6/24. */@RunWith(SpringJUnit4ClassRunner.class)public class LuceneTest ...