首页 > 代码库 > 开发进阶10_UIScrollView

开发进阶10_UIScrollView

    //创建UIScrollView

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

    //值UIScrollView的可视范围

    scroll.frame = CGRectMake(0, 0, 375, 667);

    scroll.backgroundColor = [UIColor grayColor];

    [self.view addSubview:scroll];

    

    //创建图片

    UIImageView *imageView = [[UIImageView alloc] init];

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

    //图片的宽

    CGFloat imgW = imageView.image.size.width;

    //图片的长

    CGFloat imgH = imageView.image.size.height;

    imageView.frame = CGRectMake(0, 0, imgW, imgH);

    

    [scroll addSubview:imageView];

    

    //设置UIScrollView的滚动范围(内容大小)

    scroll.contentSize = imageView.image.size;

 
 
设置UIScrollView的frame属性是设置控件的可见范围
设置UIScrollView的contentSize 属性是设置能滚动的范围
 

    //设置水平滚动条是否可见

    scroll.showsHorizontalScrollIndicator = NO;

    //设置垂直滚动条是否可见

    scroll.showsVerticalScrollIndicator = NO;

 
 

    //去掉弹簧效果

    scroll.bounces = NO;

    

    //增加额外的滚动区域

    //后面参数的顺序是按照逆时针(top、left、bottom、right)

    scroll.contentInset = UIEdgeInsetsMake(10, 20, 30, 40);

 

    //获取可视区域在可滚动范围中的坐标(以可滚动范围的左上角为原点,不收contentInset限制,contentInset添加的滚动区域不算在内(也就是说contentOffSet的坐标原点一直是contentSize的范围的左上角))

    scroll.contentOffset = CGPointMake(0, 0);

 
 
 //是否能滚动(默认是YES)

    scroll.scrollEnabled = YES;

    

    //设定滚动条的样式(枚举类型,有三种样式,默认,黑,白)

    scroll.indicatorStyle = UIScrollViewIndicatorStyleDefault;

 

BOOL bounces          是否有弹簧效果

BOOL scrollEnabled        是否能滚动

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

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

UIScrollViewIndicatorStyle indicatorStyle  设定滚动条的样式      

BOOL dragging         是否正在被拖拽    

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

BOOL decelerating           是否正在减速         

BOOL zooming         是否正在缩放          

 
 

/*

 图片的手势缩放

    -》设置UIScrollView的id<UIScrollViewDelegate>delegate代理对象

    -》设置minimumZoomScale:缩小的最小比例

    -》设置maxmunZoomScale:放大的最大比例

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

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

 

    当用户尝试缩放UIScrollView的时候,scrollView会尝试向他的delegate(代理对象)发送一条消息,询问要缩放那个子控件。换种说法,就是:scrollView会尝试调用delegate的某个方法,询问要缩放哪一个子控件,并且该方法的返回值就是需要缩放的子控件

 

    总结:

    -》设置delegate对象

    -》scrollView必须知道delegate是通过那个方法返回需要缩放的子控件

        scrollView要跟delegate对象协商好:用哪一个方法返回需要缩放的子控件- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

 

    步骤:

    -》设置ScrollView的delegate为控制器(self)

    -》控制器遵守UIScrollViewDelegate协议<UIScrollViewDelegate>

    -》控制器实现- (UIView *)viewForZoomingInScrollView: 方法,返回需要缩放的子控件

    -》设置最大和最小缩放比例

 */

 

//遵守协议

@interface ViewController () <UIScrollViewDelegate >

{

    UIImageView *_imageView;

}

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

    //1.添加UIScrollView

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

    scrollView.frame = self.view.bounds;

    [self.view addSubview:scrollView];

    

    //2.添加图片

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

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

    _imageView = [[UIImageView alloc] initWithImage:image];

    

    [scrollView addSubview:_imageView];

    

    scrollView.contentSize = image.size;

    

    //设置代理

    scrollView.delegate = self;

    

    //缩放范围

    scrollView.maximumZoomScale = 2.0;

    scrollView.minimumZoomScale = 0.2;

}

 

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

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

{

    return _imageView;

}

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

//scale:当前缩放比例

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

{

    

}

 

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

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

 

{

 

@end

开发进阶10_UIScrollView