首先实现代理:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UIScrollViewDelegate>
@property (nonatomic, retain) UIScrollView *scrollView;
@end
然后,初始化
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize scrollView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height)];
//只能一个方向滑动
scrollView.directionalLockEnabled = YES;
//是否翻页
scrollView.pagingEnabled = YES;
//背景色
scrollView.backgroundColor = [UIColor blueColor];
//垂直方向的滚动指示
scrollView.showsVerticalScrollIndicator = YES;
//滚动指示的风格
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
//水平方向的滚动指示
scrollView.showsHorizontalScrollIndicator = NO;
//指定代理
scrollView.delegate = self;
//在scrollView上添加一张图片
//图片高度是视图高度的2倍
CGRect imgFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height*2);
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
[imgView setFrame:imgFrame];
//imgView内容显示样式
[imgView setContentMode:UIViewContentModeScaleAspectFit];
//将imgView添加到scrollView上
[scrollView addSubview:imgView];
//设置scrollView的内容大小与imgView的大小相同
[scrollView setContentSize:CGSizeMake(imgView.frame.size.width, imgView.frame.size.height)];
[self.view addSubview:scrollView];
}
属性 | 作用 |
---|---|
CGSize contentOffSet | 监控目前滚动的位置 |
CGPoint contentSize | 滚动达范围 |
UIEdgeIsets contentInset | 视图在scrollview 中的位置 |
id <UIScrollViewDelegate> delegate | 代理 |
BOOL directionalLockEnabled | 是否只能在一个方向滚动 |
BOOL bounces | 碰到边框是否反弹 |
BOOL alwaysBounceVertical | 垂直方向遇到边框是否反弹 |
BOOL alwaysBounceHorizonal | 水平方向遇到边框是否反弹 |
BOOL pagingEnabled | 是否整页翻动 |
BOOL scrollEnabled | 是否能滚动 |
BOOL showsHorizontalScrollIndicator | 是否显示水平滚动条 |
BOOL showVerticalScrollIndicator | 是否显示垂直滚动条 |
UIEdgeInsets scrollIndicatorInsets | 滚动条在scrollView中的位置 |
UIScrollViewIndicatorStyle | 滚动条样式 |
float decelerationRate | 改变scrollView的减速位置 |
BOOL tracking | 监控当前目标是否正在被跟踪 |
BOOL dragging | 监控当前目标是否正在被拖拽 |
BOOL decelerating | 监控是否正在减速 |
BOOL delaysContentTouches | 是否延时调用开始滚动的方法 |
BOOL canCancelContentTouches | 是否接触取消touch的事件 |
float minimunZoomScale | 缩小达最小比例 |
float maxmumZoomScale | 放大达最大比例 |
float zoomScale | 设置变化比例 |
BOOL bounceZoom | 控制缩放的时候是否会反弹 |
BOOL zooming | 判断控件的大小是否正在改变 |
BOOL soomBouncing | 判断是否正在进行缩放反弹 |
BOOL scrollsToTop | 控制控件滚动到顶部 |
代理方法的使用:
#pragma mark - UIScrollView Delegate Methods
/*调用时机:当 contentOffSet 改变时调用*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
/* 在这里你可以写上关于UIPageControl的页面设置的算法。如下
int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width;
pageControl.currentPage = index;
*/
}
//缩放比例改变时调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"zoom scale 改变");
}
// 当开始拖拽时调用(需要拖拽一定的时间或距离)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
NSLog(@"开始拖拽");
}
//将要停止拖拽时调用
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0)
{
//注意该方法常用在当用户滚动完屏幕时加载图片,HTTP请求加载,这样会提高效率
NSLog(@"scrollViewWillEndDragging");
}
//已经停止拖拽,decelerate默认为true
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"scrollViewDidEndDragging");
}
//将要减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
{
NSLog(@"scrollViewWillBeginDecelerating");
}
//已经减速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidEndDecelerating");
}
//滚动动画停止时执行,代码改变时出发,也就是setContentOffset改变时
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
NSLog(@"scrollViewDidEndScrollingAnimation");
}
//设置缩放视图,是scrollview的子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
// return a view that will be scaled. if delegate returns nil, nothing happens
UIView *view = [[UIView alloc] init];
return view;
}
//开始缩放视图时调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
// called before the scroll view begins zooming its content
NSLog(@"scrollViewWillBeginZooming");
}
//完成缩放时调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
// scale between minimum and maximum. called after any 'bounce' animations
NSLog(@"scrollViewDidEndZooming");
}
//如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
// return a yes if you want to scroll to the top. if not defined, assumes YES
NSLog(@"scrollViewShouldScrollToTop = yes");
return YES;
}
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
// called when scrolling animation finished. may be called immediately if already at top
NSLog(@"scrollViewDidScrollToTop");
}