1. 布置界面
ScrollView的使用非常简单,只有三步
1.1 添加一个scrollview
1.2 向scrollview添加内容
1.3 告诉scrollview中内容的实际大小
首先做第一步,布置界面。
拖拽一个scrollview就可以了
就这么简单
2. 添加内容,并告诉scrollview中内容的实际大小
先给scrollview拖线至viewController的.m文件类扩展中
1 | @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; |
再要给scrollview设置代理,让代理处理相应的事件、设置相应的数据。设置代理的方法有两种:拖线和代码设置。
拖线:
代码设置,在viewDidLoad
方法中设置scrollview的代理为控制器本身。
1 | self.scrollView.delegate = self; |
注意,把控制器设为代理需要实现相应代理的接口:
现在开始添加内容,向Images.xcassets放入要用的五张图片素材,因为博主做的5张图是白色背景,为了能看清,只能把控制器背景调成其他颜色。
1 | - (void)viewDidLoad { |
解释为什么要计算每张图片的x轴:
图片实际上是这样摆放的:
橘色的是scrollView,每张图片和scrollView长宽一样大,所以只能看到一张图片,五张图片并排放置,这样滚动scrollView时候就能浏览后面的图片,实现滚动效果。
如果不希望有滚动指示器,就是滚动条,可以加入:
1 | // 设置滚动指示器不可见 |
这时运行后发现可以滚动,但是图片可以滚动到任何位置
如果希望能够像平常淘宝看到的图片轮播,轻轻划一下,可以完整的翻到下一张图片,可以加入:
1 | // 实现分页效果,原理是根据滚动控件的宽度,一个宽度是一页 |
3. 设置自动轮播
通过计时器控件计时
1 先为控制器添加一个timer
1 | @property (nonatomic, strong) NSTimer *timer; |
2 viewDidLoad
中创建计时器控件
1 | // 创建计时器控件,设定每过两秒执行`scrollImage`方法 |
3 实现@selector指定的方法
1 | - (void) scrollImage { |
这时候就能看见图片2秒滚动一次了。
4. 同类控件优先级问题
问题描述
当界面中有两个scrollview(或其子类控件)时,在滚动其中一个scrollview时候,设置了计时器的scrollview会暂定自动滚动。
比如拽入一个textView:
如果滚动下面的文字,上面的图片轮播不会继续自动滚动。
问题原因
问题的原因是因为计时器的优先级和view(各种控件)的优先级不同,所以会优先执行view的动作。
解决方法
将计时器的优先级设置和view的优先级相同
1 | // 修改优先级 |
源代码
如果需要源代码,博主已经上传:http://download.csdn.net/detail/u010127917/9042503
有什么问题都可以在博文后面留言,或者微博上私信我。
博主是 iOS 妹子一枚。
希望大家一起进步。
我的微博:Lotty周小鱼