UIScrollView基本用法

1、UIScrollview基本概念

  UIScrollView是一个用于选择滑动的视图,可以显示更多的视图。而且可以通过手势放大、缩小要显示的内容

  UIScrollView包含两个子类:UITableView、UITextView. 它们都可以实现滑动视图的所有动作

2、UIScrollView常用属性

//可以滚动的大小,默认是0 没有滚动效果
contentSize
//当touch后还没有拖到时值位YES 否则为NO
tracking
//正在缩放时为YES 否则为NO
zooming
//滚动后,手指放开还在滚动中为YES 否则为NO
decelerating
//设置手指放开后的减速速率
decelerationRate
//浮点数 能放最大的倍数
maximumZoomScale
//浮点数  能放最小的倍数
minimumZoomScale
//当值为YES 会自动滚动UIScrollView的边界 默认是NO
pagingEnabled
//决定是否可以滚动
scrollEnabled
//滚动时是否显示水平滚动条
showsHorizontalScrollIndicator
//滚动时是否显示垂直滚动条
showsVerticalScrollIndicator
//默认是YES 滚动超过边界后会有反弹回来的效果 若为NO 滚动超过边界后会立即停止
bounces
//与bounces一样的效果 区别在:效果是显示在缩放上
bouncesZoom
//默认是NO 可以在水平和垂直方向同时运动 若为YES 假如一开始是水平或垂直方法滚动 则会锁定另外一个方向的滚动,若一开始是对角方向滚动 则不会禁止某个方向的滚动
directionalLockEnabled
//设置滚动条的样式 基本只设置颜色 默认 、黑、白
indicatorStyle
//设置滚动条位置
scrollIndicatorInsets
//设置内容边缘位置
contentInsets
//设置UIScrollView滚动到某一个位置或某个区域

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; 

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;  

3、UIScrollView常用代理方法

  滚动时,滚动视图轨迹状态包括跟踪、拖动、减速和缩放。

  contentOffSet属性定义了滚动视图左边界左上方的可见点的偏移位置,具体参数如下:

//UIScrollView已经滚动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;                                               
//scrollView开始拖动 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; //scrollView结束拖动 (IOS 5.0之后的方法) - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
            withVelocity:(CGPoint)velocity
        targetContentOffset:(inout CGPoint *)targetContentOffset // scrollView结束拖动 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; //scrollview开始减速 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; //scrollView减速停止 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; //返回一个放大或缩小的视图 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; //开始放大或缩小 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
//视图正在放大或缩小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
//缩放结束
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
//是否支持滑动到底部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
//滑动到底部时调用改方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView

4、UIScrollView与UIPageControl的结合使用

5、UIScrollView的捏合手势

  只需要实现一个委托方法就可以是UIScrollView的子视图通过捏合手势实现缩放功能

1 //返回一个放大或缩小的视图
2 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; 

6、isMemberOfClass 与isKindOfClass的区别

  两者都可以坚持一个对象是否是某个类的成员,区别在于:isKindOfClass 不仅可以确定一个对象是否是某个类的成员,也可以确定某个对象是否是派生自该类的成员

  而isMemberOfClass 做不到这一点

7、案例:滑动视图实现分页缩放,双击时可以放大缩小图片

 1 //自定义ImageScrollView 继承自 UIScrollView实现缩放功能,双击也可以放大缩小
 2 - (id)initWithFrame:(CGRect)frame
 3 {
 4     self = [super initWithFrame:frame];
 5     if (self) {
 6         self.maximumZoomScale = 2.5;
 7         self.minimumZoomScale = 1;
 8         self.showsHorizontalScrollIndicator = NO;
 9         self.showsVerticalScrollIndicator = NO;
10         
11         self.delegate = self;
12         _imageView = [[UIImageView alloc] initWithFrame:self.bounds];
13         [self addSubview:_imageView];
14         
15         UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomInOrOut:)];
16         doubleTap.numberOfTapsRequired = 2;
17         [self addGestureRecognizer:doubleTap];
18     }
19     return self;
20 }
21 
22 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
23     return  _imageView;
24 }
25 - (void)zoomInOrOut:(UITapGestureRecognizer *)tapGesture{
26     if (self.zoomScale>=2.5) {
27         [self setZoomScale:2. animated:YES];
28     }else {
29        CGPoint point = [tapGesture locationInView:self];
30         [self zoomToRect:CGRectMake(point.x - 40, point.y-40, 80, 80) animated:YES];
31     }
32 }
 1 //MainViewController的主要代码
 2 - (void)viewDidLoad
 3 {
 4     [super viewDidLoad];
 5     
 6     _scrollView.contentSize = CGSizeMake(320 *4,460);
 7     _scrollView.pagingEnabled = YES;
 8     //将_scrollView的tag设置int_max 与ImageScrollView区分,否则下面通过当tag为0时_scrollView获得根据tag得的时其自己
 9     _scrollView.tag = INT_MAX;
10     for (int i=0; i<4; i++) {
11         ImageScrollView *imageScrollView = [[ImageScrollView alloc] initWithFrame:CGRectMake(0+i*320, 0, 320, 460)];
12         NSString *imageName = [NSString stringWithFormat:@"%d.JPG",i+1];
13         UIImage *image = [UIImage imageNamed:imageName];
14         imageScrollView.imageView.image = image;
15         imageScrollView.tag = i;
16         [_scrollView addSubview:imageScrollView];
17     }
18     
19     UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 400, 320, 20)];
20     pageControl.numberOfPages = 4;
21     pageControl.pageIndicatorTintColor = [UIColor redColor];
22     pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
23     pageControl.tag = 100;
24     [self.view addSubview:pageControl];
25 }
26 
27 int pre = 0;
28 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
29     int currentIndex = scrollView.contentOffset.x / 320.0;
30     UIPageControl *pageControl = (UIPageControl *)[scrollView.superview viewWithTag:100];
31     pageControl.currentPage = currentIndex;
32     ImageScrollView *imageScrollView = (ImageScrollView *)[scrollView viewWithTag:pre];
33     if (imageScrollView.zoomScale > 1.0 && pre!=currentIndex) {
34         imageScrollView.zoomScale = 1.0;
35     }
36     pre = currentIndex;
37 }

 

posted @ 2014-03-27 09:41  赵彦辉  阅读(420)  评论(0)    收藏  举报