照片查看器案例
照片浏览器是我在IOS第一次完成的小项目,一个非常简单的程序,但是对于0基础的我来说,还是显得有些不足,这是因为对于各种控件的不了解,各种属性的不了解,致使我理解有些难度,但是我还是完成了。
这是一个完全手写的代码,不使用拖拽控件。
在这里我只是说一下我自己理解的难点,重点。
其实,控件啊,属性啊,这些都不是最重要的,在日后的生活中,我们慢慢就会了解,最重要的还是思想。
手写控件的思想,包含他的流程与优化。
比如这个照片浏览器
(图片格式不对,改天换一个)
我们首先要做的就是分析界面:
1.需要读写和修改的控件要设置属性
2.需要监听响应时间的对象,需要添加监听方法
之后就是手码懒加载来创建控件,这里使用懒加载,是非常符合面向对象思想的。
定义控件属性,属性必须是strong的(现在不知道为什么,老师说以后会讲),就像这样
@property (nonatomic, strong) UILabel *pagesLabel;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UILabel *imageDescribeView;
@property (nonatomic, strong) UIButton *leftButton;
@property (nonatomic, strong) UIButton *rightButton;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UILabel *imageDescribeView;
@property (nonatomic, strong) UIButton *leftButton;
@property (nonatomic, strong) UIButton *rightButton;
在属性的getter方法中实现懒加载,实例如下:
/** 使用懒加载建立imageView */
- (UIImageView *)imageView
{
if (_imageView == nil) {
CGFloat imageW = 200;
CGFloat imageH = 200;
CGFloat imageY = 80;
CGFloat imageX = (320-imageW)/2;
// 实例化一个图片视图
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, imageW, imageH)];
_imageView = imageView;
[self.view addSubview:imageView];
}
return _imageView;
}
- (UIImageView *)imageView
{
if (_imageView == nil) {
CGFloat imageW = 200;
CGFloat imageH = 200;
CGFloat imageY = 80;
CGFloat imageX = (320-imageW)/2;
// 实例化一个图片视图
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, imageW, imageH)];
_imageView = imageView;
[self.view addSubview:imageView];
}
return _imageView;
}
这里使用懒加载的好处:
1.不必将创建对象的代码去不都写在viewDidLoad里面,代码的可读性更强
2.每个控件的getter方法中跟别负责各自的实例化处理,代码彼此之间的独立性强,松耦合
使用Plist文件:目的在于,将数据与代码分离
加载方法:
NSString *path = [[NSBound mainBound] pathForResource:@“Images” ofType:@“plist”];
_imagesList = [NSArray arrayWithContentsOfFile:path];
这样就可以在名字叫Images.plist的Plist里读取出我们之前存进去的数据,做到了数据与代码的分离。