UIScrollView的简单使用

来源:互联网 发布:linux mount u盘 编辑:程序博客网 时间:2024/05/22 00:44


一、 基本使用

1. 作用

UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看

 

2. 常见属性

l CGSize contentSize :设置UIScrollView的滚动范围

l CGPoint contentOffset UIScrollView当前滚动的位置

l UIEdgeInsets contentInset :这个属性可以在四周增加滚动范围

 

 

3. 其他属性

l BOOL bounces是否有弹簧效果

l BOOL scrollEnabled是否能滚动

l BOOL showsHorizontalScrollIndicator是否显示水平方向的滚动条

l BOOL showsVerticalScrollIndicator     是否显示垂直方向的滚动条

l UIScrollViewIndicatorStyle indicatorStyle  设定滚动条的样式

l BOOL dragging 是否正在被拖拽

l BOOL tracking  touch后还没有拖动的时候值是YES,否则NO

l BOOL decelerating 是否正在减速

l BOOL zooming 是否正在缩放

 

二、 手势缩放

1. 设置UIScrollViewid<UISCrollViewDelegate> delegate代理对象  (如果控制器承当代理对象需要遵从协议)

2. 设置minimumZoomScale :缩小的最小比例

3. 设置maximumZoomScale :放大的最大比例

4. 让代理对象实现下面的方法,返回需要缩放的视图控件

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

l 跟缩放相关的常用方法还有

u 正在缩放的时候调用

-(void)scrollViewDidZoom:(UIScrollView *)scrollView

u 缩放完毕的时候调用

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale

#import "MJViewController.h"


@interface MJViewController () <UIScrollViewDelegate>
{
 
   UIImageView *_imageView;

}

@end


@implementation MJViewController


- (void)viewDidLoad
{
    [super viewDidLoad];

   
    // 1.添加UIScrollView

    UIScrollView *scrollView = [[UIScrollView alloc] init];

//    scrollView.frame = CGRectMake(0, 0, 320, 460);

    scrollView.frame = self.view.bounds;

    [self.view addSubview:scrollView];

   
    // 2.添加图片

    UIImage *image = [UIImage imageNamed:@"big.jpg"];

    // 调用initWithImage:方法创建出来的UIImageView,它的宽高默认跟图片的宽高一样

    _imageView = [[UIImageView alloc] initWithImage:image];
//    // 设置图片
//
    imageView.image = [UIImage imageNamed:@"big.jpg"];

//   
//    // 设置frame
//
    imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);

    [scrollView addSubview:_imageView];

   
    // 设置内容范围

    scrollView.contentSize = image.size;

   
    // 设置scrollview的代理对象

    scrollView.delegate = self;

   
    // 设置最大伸缩比例

    scrollView.maximumZoomScale = 2.0;

    // 设置最小伸缩比例

    scrollView.minimumZoomScale = 0.2;
}


#pragma mark - UIScrollView 的 代理方法

#pragma mark 这个方法返回的控件就能进行捏合手势缩放操作

#pragma mark 当UIScrollView尝试进行缩放的时候就会调用

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{

    return _imageView;

}


#pragma mark 当缩放完毕的时候调用

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{

//    NSLog(@"结束缩放 - %f", scale);

}


#pragma mark 当正在缩放的时候调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{

//    NSLog(@"-----");

}
@end
 

三、 分页效果

l 设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转

l 一般会配合UIPageControl增强分页效果,UIPageControl常用属性:

u NSInteger numberOfPages 总页数

u NSInteger currentPage 当前的页码

u BOOL hidesForSinglePage 当只有一页的时候,是否要隐藏视图

l 监听UIPageControl的页面改变:

// 添加监听器

[pageControl addTarget:self action:@selector(pageChange:) 

forControlEvents:UIControlEventValueChanged];

// 监听方法

- (void)pageChange:(UIPageControl *)pageControl 

{  

}

#import "MJViewController.h"


#define kCount 8     //page的页数

@interface MJViewController () <UIScrollViewDelegate>
{
 
   UIPageControl *_pageControl;

}


@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@implementation MJViewController
- (void)viewDidLoad
{

    [super viewDidLoad]; 
    CGFloat w = self.view.frame.size.width;

    CGFloat h = self.view.frame.size.height;

    for (int i = 0; i< kCount; i++) {

        UIImageView *imageView = [[UIImageView alloc] init];    
        // 1.设置frame

        imageView.frame = CGRectMake(i * w, 0, w, h);      
        // 2.设置图片

        NSString *imgName = [NSString stringWithFormat:@"0%d.jpg", i + 1];
        imageView.image = [UIImage imageNamed:imgName];        
        [_scrollView addSubview:imageView];

    }   
    // height == 0 代表 禁止垂直方向滚动

    _scrollView.contentSize = CGSizeMake(kCount * w, 0);

    _scrollView.showsHorizontalScrollIndicator = NO;

    _scrollView.pagingEnabled = YES;

    _scrollView.delegate = self;

   
    // 添加PageControl

    UIPageControl *pageControl = [[UIPageControl alloc] init];

    pageControl.center = CGPointMake(w * 0.5, h - 20);

    pageControl.bounds = CGRectMake(0, 0, 150, 50);

    pageControl.numberOfPages = kCount;
 // 一共显示多少个圆点(多少页)

    // 设置非选中页的圆点颜色

    pageControl.pageIndicatorTintColor = [UIColor redColor];

    // 设置选中页的圆点颜色

    pageControl.currentPageIndicatorTintColor = [UIColor blueColor];   
    // 禁止默认的点击功能

    pageControl.enabled = NO;    
    [self.view addSubview:pageControl];

    _pageControl = pageControl;
}


#pragma mark - UIScrollView的代理方法

#pragma mark 当scrollView正在滚动的时候调用

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    int page = scrollView.contentOffset.x / scrollView.frame.size.width;

//    NSLog(@"%d", page);   

  // 设置页码
    _pageControl.currentPage = page;

}
@end


0 0
原创粉丝点击