目的:设计一个图片浏览器,点击滑块可以实现图片更换,每张图片带有文字说明。点击设置弹出设置界面,里面包含夜间模式和图片放大,再次点击设置设置界面关闭。
效果图:
界面搭建和连线在此不再细说。
1.代码
@interface ViewController ()
{
// 定义一个全局变量,来保存IO操作时保存的数组
NSArray *_allDescs;
}
@end
@implementation ViewController
// 控制器的view加载完就会调用一次
- (void)viewDidLoad
{
[super viewDidLoad];
// 获取文件路径
NSBundle *bundele = [NSBundle mainBundle]; // 固定写法 直接访问app包中得资源
NSString *path = [bundele pathForResource:@"desces" ofType:@"plist"]; // 文件名 拓展名
_allDescs = [NSArray arrayWithContentsOfFile:path]; // 加载path对应的文件来创建数组
// 设置默认描述
_imageDesc.text = _allDescs[0];
}
// 滑条
- (IBAction)sliderValue:(UISlider *)sender {
// 1.设置中间图片
// 获得图片名称 %.f不保留任何小数
NSString *imageName = [NSString stringWithFormat:@"%.f.jpg",sender.value];
_imageView.image = [UIImage imageNamed:imageName];
// 2.设置序号
int No = (int)(sender.value+0.5);
_imageNo.text = [NSString stringWithFormat:@"%d/16",No+1];
// 3.设置描述
_imageDesc.text = _allDescs[No];
}
// 夜间模式开关
- (IBAction)nightMode:(UISwitch *)sender {
if (sender.on) { // 侦听开关状态
self.view.backgroundColor = [UIColor darkGrayColor]; // 深灰色
} else self.view.backgroundColor = [UIColor whiteColor]; // 白色
}
// 图片缩放
- (IBAction)imageSizeChange:(UISlider *)sender {
// 将图片尺寸改为滑块传出的值的倍数
_imageView.transform = CGAffineTransformMakeScale(sender.value, sender.value);
// 将倍数显示出来
_imageChange.text = [NSString stringWithFormat:@"%.1f",sender.value];
}
// 点击了设置
- (IBAction)setting:(id)sender {
// 设置动画起始位置以及时间
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
// 取出中点
CGPoint tempCenter = _settingView.center;
// 修改Y值,如果设置界面和屏幕的高度相同就弹出,否则就隐藏起来
if (_settingView.frame.origin.y == self.view.frame.size.height ) { // 设置界面目前看不到
tempCenter.y -= _settingView.bounds.size.height;
} else tempCenter.y += _settingView.bounds.size.height;
// 重新赋值
_settingView.center = tempCenter;
[UIView commitAnimations];
}
2.总结
1.settingView的高度设置为屏幕的高度,可以达到隐藏设置界面的目的,在点击了设置按钮的时候,将settingView的高度减少自身的高度时settingView就可以弹出。
2. UISlider控件:sender.value:返回一个浮点型值,起始值、最大值、最小值设置如图:
在UISlider中的定义:
@property(nonatomic) float value; // default 0.0. this value will be pinned to min/max
@property(nonatomic) float minimumValue; // default 0.0. the current value may change if outside new min value
@property(nonatomic) float maximumValue; // default 1.0. the current value may change if outside new max value
可以看出,在代码中通过点语法或者set方法均可以其值。
3. UISwitch控件:
常用定义:
@property(nonatomic,getter=isOn) BOOL on;
4.首次使用到字典:
首先通过代码将字典文件加载进来
NSBundle *bundele = [NSBundle mainBundle]; // 固定写法 直接访问app包中得资源
NSString *path = [bundele pathForResource:@"desces" ofType:@"plist"]; // 文件名 拓展名
_allDescs = [NSArray arrayWithContentsOfFile:path];
调用时:
_imageDesc.text = _allDescs[No];
可以将数组中得第[No]个内容赋值给imageDesc。