UIScrollView是实现滚屏的View, 是实现所有滚动视图的基类.
UIScrollview主要专⻓于两个⽅⾯:
1. 滚动:contentSize⼤于frame.size的时候,能够滚动。
2. 缩放:⾃带缩放,可以指定缩放倍数。
UIScrollView是实现滚屏的View, 是实现所有滚动视图的基类.
这是UIScrollView其中几个滚动代理⽅法:
delegate
| |
- (void)scrollViewDidScroll:(UIScrollView *)scrollView | //滚动就会触发 |
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView | //开始拖拽时触发 |
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate | //结束拖拽时触发 |
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView | //开始减速时触发 |
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView | //结束减速时触发(停⽌止时) |
UIScrollView
缩放代理⽅法
delegate
| |
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale | //完成放大缩⼩触发 |
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView | //指定某个UIScrollView的⼦视图可以被放大缩⼩ |
下面用代码介绍
UIScrollView的属性:
#import "RootViewController.h"
@interface RootViewController () <UIScrollViewDelegate>
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, assign) NSInteger numberOfPage;
@property (nonatomic, assign) NSInteger currentOfPage;
@property (nonatomic, assign) BOOL hidesForSinglePage;
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//初始化一个跟屏幕一样大的UIScrollView
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
#pragma mark - 设置 UIScrollView 的 contentSize 属性 (显示区域)
//设置显示区域大小
//只能上下滑动
self.scrollView.contentSize = CGSizeMake(0, kScreenHeight * 2);
//只能左右滑动
self.scrollView.contentSize = CGSizeMake(kScreenWidth * 2, 0);
self.scrollView.contentSize = CGSizeMake(kScreenWidth, kScreenHeight*2);
//添加一张图片 为了看出明显效果可以添加图片观察
UIImageView *imageView = [[UIImageView alloc] initWithFrame:(CGRectMake(0, 0, kScreenWidth, kScreenHeight))];
UIImage *image = [UIImage imageNamed:@"09.png"];
imageView.image = image;
imageView.tag = 100;
[self.scrollView addSubview:imageView];
[imageView release];
#pragma mark - 设置 UIScrollView 的 bounces 属性 (边界回弹)
//边界回弹的属性
self.scrollView.bounces = YES;
//设置水平回弹
self.scrollView.alwaysBounceHorizontal = YES;
//控制是否显⽰⽔平⽅向的滚动条
self.scrollView.showsHorizontalScrollIndicator = YES;
//设置垂直回弹
self.scrollView.alwaysBounceVertical = YES;
//控制是否显⽰示垂直⽅方向的滚动条
self.scrollView.showsVerticalScrollIndicator = YES;
//设置scrollView是否滚动
self.scrollView.scrollEnabled = YES;
#pragma mark - 设置 UIScrollView 的缩放和扩大
//设置图片缩放的倍数 (扩大的倍数)
self.scrollView.maximumZoomScale = 3.0;
//设置图片缩小的倍数
self.scrollView.minimumZoomScale = 0.5;
#pragma mark - 设置 UIScrollView 的代理完成缩放功能
//设置代理
self.scrollView.delegate = self;
self.scrollView.tag = 200;
//是否整屏翻动
self.scrollView.pagingEnabled = YES;
//设置变化比例
self.scrollView.zoomScale = 0.5;
//判断是否正在进⾏缩放反弹
NSLog(@"%d", self.scrollView.zooming);
//控制缩放时是否会反弹
self.scrollView.bouncesZoom = YES;
//添加背景颜色
self.scrollView.backgroundColor = [UIColor orangeColor];
//显示视图
[self.view addSubview:self.scrollView];
#pragma mark - 设置button添加一个scrollView的动画, 测试代理方法
//添加一个不受滑动影响位置的button
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake((kScreenWidth - 100) / 2, 50, 100, 30);
button.backgroundColor = [UIColor colorWithRed:0.918 green:0.500 blue:0.500 alpha:1.000];
[button setTitle:@"添加动画" forState:(UIControlStateNormal)];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button];
#pragma mark - 设置button复原缩放
UIButton *button2 = [UIButton buttonWithType:(UIButtonTypeCustom)];
button2.frame = CGRectMake((kScreenWidth - 100) / 2, 100, 100, 30);
button2.backgroundColor = [UIColor colorWithRed:0.918 green:0.567 blue:0.500 alpha:1.000];
[button2 setTitle:@"缩放复原" forState:(UIControlStateNormal)];
[button2 addTarget:self action:@selector(button2Click:) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button2];
}
#pragma mark - 利用button添加一个scrollView的动画, 测试代理方法,点击方法的实现
- (void)buttonClick:(UIButton *)button {
UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:200];
//ContentOffset 是scrollView的重要属性
[scrollView setContentOffset:(CGPointMake(kScreenWidth * 2, 0)) animated:YES];
}
//实现缩放复原
- (void)button2Click:(UIButton *)button {
UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:200];
[scrollView setZoomScale:1.0 animated:YES];
}
#pragma mark - scrollView的代理
//开始减速时触发
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSLog(@"将要开始减速时触发");
}
//结束减速时触发(停⽌止时)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"已经结束减速时触发.");
}
//开始拖拽时触发
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"将要开始拖拽时触发");
}
//将要结束拖拽时触发
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSLog(@"将要结束拖拽时触发");
}
//结束拖拽时触发
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"已经结束拖拽时触发.");
}
//修改动画时触发
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
NSLog(@"scrollView触发动画效果, 修改动画时触发");
}
//开始缩放时触发
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
NSLog(@"将要开始缩放时触发");
}
//完成放大缩⼩触发, 结束缩放时触发
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"已经结束缩放时触发");
float value = scrollView.zoomScale;
NSLog(@"%f",value);
}
//滚动时触发(不管是移动还是缩放都触发)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"只要滚动就触发");
CGPoint point = scrollView.contentOffset;
NSLog(@"%f,%f",point.x,point.y);
}
//顶部回弹时触发
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
NSLog(@"点击顶部时回弹效果触发");
}
//设置是否可以实现点击顶部时回弹效果触发, 默认为yes.
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
return YES;
}
//只要缩放就触发
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
NSLog(@"只要缩放就触发");
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:100];
imageView.center = self.view.center;
}
#pragma mark - 完成缩放功能的方法(代理方法)
//指定某个UIScrollView的⼦视图可以被放大缩⼩, 这里的参数就是要缩放的scrollView
//缩放扩大这个功能是scrollView的并不是上面的imageView
//返回的view是scrollView上的子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
UIImageView *imageView = (UIImageView *)[self.view viewWithTag:100];
return imageView;
}