学习UI已经一周左右,制作了一个简易相册!效果图如下:
![](https://img.haomeiwen.com/i1712683/3b3bb0193da04954.gif)
该工程在MRC模式下创建,需注意dealloc及release,这段代码并没有按照写好后的顺序出现,而是按照问题出现及思考的顺序书写,阅读时需要注意
代码部分:
MyHeader.h:
![](https://img.haomeiwen.com/i1712683/b1150fe4d13048d3.png)
由于需要大量使用屏幕的宽与高,所以先在MyHeader.h中声明两个宏定义
![](https://img.haomeiwen.com/i1712683/71c061427af108b8.png)
AppDelegate:
初始化window,设置视图控制器及添加导航栏!此处就不一一赘述!
注意:
![](https://img.haomeiwen.com/i1712683/512f3928ffe15e16.png)
这段代码将导航栏的透明度设置为不透明,在接下来的书写中需要注意要预留出导航栏的高度!
ViewController:
设置导航栏标题,导航栏颜色及风格:
![](https://img.haomeiwen.com/i1712683/fac79ee6d3a4ccb4.png)
初始化首页的滚动视图,以此实现首页上下滑动(以下代码书写在loadView中):
![](https://img.haomeiwen.com/i1712683/c5abe2cc421136b5.png)
由于预留导航栏的高度,所以需要在设置滚动视图的高度时减去64,首页显示方式为3行2列,所以设置滚动视图容量时只需将图片大小乘三就足够了!
添加图片:
![](https://img.haomeiwen.com/i1712683/666f61f3f983a425.png)
共有6张图,用for循环6次,由于偏移量的改变,所以需要进行if判断,图片用1-6命名,可以充分利用i,名为奇数的放在左边,偶数的放在右边!
![](https://img.haomeiwen.com/i1712683/dcbfaaca91f21b99.png)
用tag值对图片进行标记,图片的用户交互默认为关闭,需要手动开启,否则为图片添加手势会无效
![](https://img.haomeiwen.com/i1712683/dbfc7ca807c0e0ec.png)
将轻拍手势添加给图片,在下面需要写一个didTaoImageView的手势实现页面跳转
![](https://img.haomeiwen.com/i1712683/ca3abaa581c77a83.png)
在顶部引入头文件,pushViewController方法实现跳转,animated后写YES代表开启动画
点击图片,实现跳转,效果如下:
![](https://img.haomeiwen.com/i1712683/5f91d6d3c0b16ee8.gif)
问题1:卡顿
跳转过程中会出现卡顿现象,此时需要在新界面的文件中将self.view给一个背景色!
修改后效果如下图:
![](https://img.haomeiwen.com/i1712683/f3badab59dbd02c6.gif)
问题2:导航栏标题
我们需要根据选择的照片来判断是第几张图片,所以跳转后页面的导航栏标题不能写死,要能根据选择的图片进行初始化,这里用到了属性传值:
首先,需要在DetailViewController.h中声明一个整型变量,这里命名为num,然后在ViewController.m中进行属性传值
![](https://img.haomeiwen.com/i1712683/a033e531a294cf7c.png)
6张图片的tag值分别为1001-1006,减掉1000就得到了对应第几张,将number的值赋给num
DetailViewController.m:
在viewDidLoad中设置偏移量(确保页面跳转后显示在前一页点击的图片)及导航栏的标题
![](https://img.haomeiwen.com/i1712683/80351fff37d5fb3e.png)
在延展里声明一个属性scrollView,类型为:UIScrollView 此处也需要用到屏幕的宽与高,所以也需进行宏定义,此时使用到了前一页传过来的num
![](https://img.haomeiwen.com/i1712683/6b75ce2ff130b018.gif)
![](https://img.haomeiwen.com/i1712683/e01a6d412b73fb32.png)
这里依然会用到一个大的滚动视图,在延展里将滚动视图写成属性,注意要将导航栏的64减掉,并且需要整页翻动
添加图片:
![](https://img.haomeiwen.com/i1712683/ef27b38498e4efc0.png)
添加后效果如下:
![](https://img.haomeiwen.com/i1712683/323cd072bc41bfc4.gif)
问题3:标题不随翻页改变:
翻页后标题不会实时改变,此时需在DetailViewController.h中签订<UIScrollViewDelegate>协议.在DetailViewController.m中设置代理人:
![](https://img.haomeiwen.com/i1712683/78070a3909dc6f54.png)
协议中有一个方法,结束减速,也就表示滑动结束:
![](https://img.haomeiwen.com/i1712683/3c4d7859f5c3dd55.png)
在方法中修改标题,需用到x方向的偏移量,除以屏幕的宽就是翻了几张,由于第一张没翻页,第二张翻了一页,第三张翻了两页,以此类推,需要在计算结果后加一,就能表示当前图片为第几张.这样简易相册就完成了!
缺点:
1.功能少,只能实现简单的翻页和页面跳转!
2.开销大,在循环中创建UIImageView,每走一次循环,便都需完成创建与释放的过程,图片多就需要创建相对应数量的UIImageView,在电脑上内存还够用,但6张图片就已接近80M,在手机上无法使用
3.耦合度高,需在创建相册时提前写好图片的张数
再附上一张效果图:
![](https://img.haomeiwen.com/i1712683/f96b3c31e6886ff7.gif)
由于学习时间较短,还不能写出太好的代码,还请各位多多帮助!
网友评论