1.注意
- 如果UIScrollView无法滚动,可能是以下原因:
- 没有设置contentSize
- scrollEnabled = NO
- 没有接收到触摸事件:userInteractionEnabled = NO
- 没有取消autolayout功能(要想scrollView滚动,必须取消autolayout)
2.UIScrollView使用
1.给scrollView添加内容
2.设置contentSize属性(只能在代码中设置)
3.UIScrollView重要属性
1.contentOffset(通过按钮改变其位移)
2.contentInset
注意:通过stroryboard设置立即生效,通过代码设置需配合contentOffect手动位移
@property(nonatomic) CGPoint contentOffset;
这个属性用来表示UIScrollView滚动的位置
@property(nonatomic) CGSize contentSize;
这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远)
@property(nonatomic) UIEdgeInsets contentInset;
这个属性能够在UIScrollView的4周增加额外的滚动区域
4.APP
1.xib界面布局(减少代码)
2.通过最后按钮的frame获取contentSize的height(CGRectGetMaxY(frame))
3.storyboard设置contentInset(使用代码设置还需设置contentOffset)
5.scrollView代理方法
1.要想成为代理遵守协议(UIScrollViewDelegate)
1.声明协议(一般协议名称:控件名称 + Delegate)
2.实现协议定义的接口方法
3.设置代理(UIViewController成为scrollView的代理)
// 用户开始拖拽时调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
// 滚动到某个位置时调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
// 用户结束拖拽时调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
6.scrollView实现缩放功能
1.设置最大、最小缩放倍数(注:倍数相等时,无法缩放)
minimumZoomScale :缩小的最小比例
maximumZoomScale :放大的最大比例
2.当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
缩放完毕的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
7.图片轮播功能
1.将内容添加到scrollView中(5张图片)
2.设置scrollView的contentSize
3.设置翻页属性(UIScrollView的pageEnabled属性设置为YES)
4.添加UIPageControl控件
5.设置UIPageControl的页码 (利用contentSize计算页码)
- 一共有多少页
@property(nonatomic) NSInteger numberOfPages;
- 当前显示的页码
@property(nonatomic) NSInteger currentPage;
- 只有一页时,是否需要隐藏页码指示器
@property(nonatomic) BOOL hidesForSinglePage;
- 其他页码指示器的颜色
@property(nonatomic,retain) UIColor *pageIndicatorTintColor;
- 当前页码指示器的颜色
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
6.增加自动滚动(NSTimer实现)
调用下面的方法就会开启一个定时任务
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget
selector:(SEL)aSelector
userInfo:(id)userInfo
repeats:(BOOL)yesOrNo;
每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务
通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务
- (void)invalidate;