IOS开发学习笔记020-练习总结

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

最终效果如下

       

 1、新建一个工程Single View Application

总体如下

 不过要关闭自动布局功能

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

关于导入图片:

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

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

  顶部默认是1/16

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

  图片默认显示 0.png

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

如下:

 1 #import <UIKit/UIKit.h>
 2 
 3 @interface SLQViewController : UIViewController
 4 - (IBAction)sliderValueChanged:(UISlider *)slider;  // 滑动条-改变图显示顺序的监听事件
 5 @property (weak, nonatomic) IBOutlet UIImageView *imageView; // 图片显示对象
 6 @property (weak, nonatomic) IBOutlet UILabel *imageNum; // 顶部图片显示的顺序
 7 @property (weak, nonatomic) IBOutlet UILabel *imageInfo; // 底部图片的描述信息
 8 @property (weak, nonatomic) IBOutlet UIView *settingView; // 设置界面
 9 - (IBAction)setting:(id)sender; // 设置按钮监听事件
10 - (IBAction)imageSizeChange:(UISlider *)sender;// 设置界面改变图片大小的监听事件
11 - (IBAction)nightModel:(UISwitch *)sender;// 设置界面switch按钮的监听事件
12 
13 @end

3、主界面代码实现

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

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

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

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

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

  2、接着显示图片  imageView

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

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

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

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

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

  首先新建一个plist文件

  

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

  

  添加结果如下

   

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

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

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

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

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

  读取文件如下

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

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

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

 4、设置界面的实现 settingView

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

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

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

  2、夜间模式实现

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

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

  3、图片大小改变

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

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

整个 SLQViewController.m文件如下:

 1 //
 2 //  SLQViewController.m
 3 //  图片浏览器
 4 //
 5 //  Created by Christian on 15/4/25.
 6 //  Copyright (c) 2015年 itcast. All rights reserved.
 7 //
 8 
 9 #import "SLQViewController.h"
10 
11 @interface SLQViewController ()
12 {
13     NSArray *_array; // 保存文字描述信息
14 }
15 
16 @end
17 
18 @implementation SLQViewController
19 
20 - (void)viewDidLoad
21 {
22     [super viewDidLoad];
23     // Do any additional setup after loading the view, typically from a nib.
24     
25     // 3、设置描述
26     // 如果要访问资源包中得所有资源,可以通过这个类访问,
27     NSBundle *bundle = [NSBundle mainBundle];
28     // 获取全路径
29     NSString *path = [bundle pathForResource:@"desc" ofType:@"plist"];
30     // 加载所有描述
31     _array= [NSArray arrayWithContentsOfFile:path];
32      _imageInfo.text = _array[0]; // 设置默认显示描述
33 }
34 
35 - (void)didReceiveMemoryWarning
36 {
37     [super didReceiveMemoryWarning];
38     // Dispose of any resources that can be recreated.
39 }
40 
41 - (IBAction)sliderValueChanged:(UISlider *)slider
42 {
43     // 1、设置中间的图片
44     // 获得文件名 %.f 不保存任何小数
45     NSString *name = [NSString stringWithFormat:@"%.f.png",slider.value];
46     _imageView.image = [UIImage imageNamed:name];
47     // 2、设置显示第几张
48     _imageNum.text = [NSString stringWithFormat:@"%.f/16",slider.value + 1];
49     // 3、设置描述
50     int index = (int)(slider.value + 0.5); // +0.5是为了消除强制转换的四舍五入所
51     _imageInfo.text = _array[index];
52     
53     // NSLog(@"%d",index);
54 
55 }
56 - (IBAction)setting:(id)sender
57 {
58     // 动画开始
59     [UIView beginAnimations:nil context:nil];
60     // 设置动画时间
61     [UIView setAnimationDuration:0.5];
62     // 取出中点,现在是隐藏状态的中点
63     CGPoint center = _settingView.center;
64     
65     // 修改y值,如果要_settingView的y坐标值和整个主界面的高度相同,那么就没显示到主界面中
66     if (_settingView.frame.origin.y == self.view.frame.size.height) // 没出现就弹出
67     {
68         center.y -= _settingView.bounds.size.height; // _settingView的y值减去自身的高度,那么可将界面显示到主界面
69     }
70     else
71     {
72         center.y += _settingView.bounds.size.height; // 已经出现就隐藏
73     }
74     // 重新赋值
75     _settingView.center = center;
76     // 执行动画
77     [UIView commitAnimations];
78 }
79 
80 - (IBAction)imageSizeChange:(UISlider *)sender
81 {
82     // transform 属性修改
83     _imageView.transform = CGAffineTransformMakeScale(sender.value, sender.value);
84 }
85 
86 - (IBAction)nightModel:(UISwitch *)sender
87 {
88     if (!sender.on) // 如果开关关闭就显示白色
89     {
90         self.view.backgroundColor = [UIColor whiteColor]; // 关闭--背景显示白色
91 
92     }
93     else // 否则显示灰色
94         self.view.backgroundColor = [UIColor darkGrayColor]; // 打开--背景显示灰色
95 }
96 
97 @end

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

原文地址:https://www.cnblogs.com/songliquan/p/4458718.html