UI_UIScrollView

//

//  ViewController.m

//  UIScrollView

//

//  Created by HarrySun on 16/7/12.

//  Copyright © 2016 Mobby. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()<UIScrollViewDelegate>


@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, strong) UIPageControl *pageControl;


@end


#define kWidth self.view.bounds.size.width

#define kHeight self.view.bounds.size.height



@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    

    //准备图片

    NSMutableArray *imagesArray = [[NSMutableArray alloc]initWithCapacity:5];

    for(int i = 1;i<=3;i++){

        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i]];

        [imagesArray addObject:image];

    }

    

    

    

    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight )];

    [self.view addSubview:self.scrollView];

    self.scrollView.contentOffset = CGPointMake(0, 0);  // 默认显示x=0y=0的地方

    self.scrollView.contentSize = CGSizeMake( 3 * kWidth, kHeight ); // contentSize决定了视图是否能够滚动

    self.scrollView.pagingEnabled = YES;    // 是否整页翻动

    self.scrollView.bounces = YES// 边界是否回弹

    self.scrollView.scrollsToTop = YES; // 点击上方状态栏是否回到顶部

    self.scrollView.scrollEnabled = YES;    // 是否能够滚动

    self.scrollView.showsHorizontalScrollIndicator = YES;   // 是否显示水平方向的滚动条

    self.scrollView.showsVerticalScrollIndicator = NO // 是否显示竖直方向滚动条

    self.scrollView.alwaysBounceVertical = YES; // 竖直方向遇到边框是否反弹

    self.scrollView.alwaysBounceHorizontal = YES;   //水平方向遇到边框是否反弹

    self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;    // 滚动条的样式,基本只是设置颜色,总共3个颜色:默认、黑、白

    self.scrollView.contentInset = UIEdgeInsetsMake(0, 50, 50, 0);   // 设置而内容的边缘

    self.scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(50, 0, 0, 0);   // 设置滚动条的边缘

    self.scrollView.directionalLockEnabled = YES;    // 是否同时运动,lock

    [self.scrollView flashScrollIndicators];     // 短时间内显示滚动条

    

    self.scrollView.delegate = self;

    

    

    self.scrollView.minimumZoomScale = 0.5; // 缩小的最小比例

    self.scrollView.maximumZoomScale = 2;   // 放大的最大比例

    self.scrollView.bouncesZoom = NO;   // 控制缩放的时候是否会反弹

    

    

    

    

    //将图片视图添加到scrollView

    for (int i =0; i<imagesArray.count; i++) {

        UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(kWidth * i, 0, kWidth, kHeight)];

        imgView.image = imagesArray[i];

        [self.scrollView addSubview:imgView];

    }

    

    

    

    

    

    _pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];  // 修改大小只是背景大小就改了,原点的大小不变

    self.pageControl.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height - 70);

    self.pageControl.backgroundColor = [UIColor redColor];

    self.pageControl.numberOfPages = imagesArray.count; // 设置圆点个数

    self.pageControl.currentPage = 0;   // 设置默认选中的圆点

    self.pageControl.hidesForSinglePage = YES // 当只剩下一个圆点的时候,设置是否隐藏

    self.pageControl.defersCurrentPageDisplay = NO;     // 设置是否延迟自动更新控制器的当前页码

    self.pageControl.pageIndicatorTintColor = [UIColor greenColor]; // 设置未选中的圆点颜色

    self.pageControl.currentPageIndicatorTintColor = [UIColor blueColor];   // 设置选中的圆点颜色

    

    

    

    // 添加事件

    [self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];

    

    

    [self.view addSubview:self.pageControl];

    


    

   

    

    

}



#pragma mark - delegate


// 返回一个放大或者缩小的试图

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

    

    

    if (self.scrollView.contentOffset.x == 0) {

        return [self.scrollView.subviews firstObject];

    }else if (self.scrollView.contentOffset.x == kWidth){

        return [self.scrollView.subviews objectAtIndex:1];

    }else{

        return [self.scrollView.subviews lastObject];

    }

    

}


// 开始放大或者缩小

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{

    

    NSLog(@"开始放大或者缩小");

}


// 缩放结束时

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

    

    NSLog(@"缩放结束时");

}


// 视图已经放大或缩小

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

    

    NSLog(@"正在缩放或放大?:%d",self.scrollView.zooming);   // 当正在缩放或放大的时候,返回YES

    NSLog(@"当缩小到最小或放到到最大?:%d",self.scrollView.zoomBouncing);    // 放缩放到最小或放大到最大返回YES

    // 如果操作是缩小操作(即zoomScale < 1),那么让视图固定在中心位置

    if (scrollView.zoomScale < 1) {

        // 缩放当前视图

        UIImageView *imageView = (UIImageView *)[scrollView.subviews firstObject];

        // 固定中心位置

        imageView.center = CGPointMake(scrollView.bounds.size.width / 2, scrollView.bounds.size.height / 2);

    }else{

        // 下方是补齐左上方的空隙

        // 当视图放大时,保证左上角不出现偏移

        UIImageView *imageView = (UIImageView *)[scrollView.subviews objectAtIndex:0];

        CGRect rect = CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height);

        imageView.frame = rect;

    }

    NSLog(@"视图已经放大或缩小");

}


// 是否支持滑动至顶部

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{

    

    return YES;

}


// 滑动到顶部时调用该方法

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

    

    NSLog(@"滑动到顶部时调用该方法");

}


// scrollView 已经滑动

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

    

    

    NSLog(@"正在拖动?:%d",self.scrollView.dragging);  // 如果scrollView正在被拖动,返回YES

    NSLog(@"scrollView 已经滑动");

}


// scrollView 开始拖动

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

    

    NSLog(@"scrollView 开始拖动");

}


// scrollView 结束拖动

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

    

    

    NSLog(@"scrollView 结束拖动");

}


// scrollView 开始减速

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

    

    

    NSLog(@"scrollView 开始减速");

}


// scrollView 减速停止

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

    

    

    NSLog(@"正在减速?:%d",self.scrollView.decelerating);    // 检测scrollView是否是正在减速

    

    //获取偏移量

    CGFloat x = self.scrollView.contentOffset.x;

    //根据偏移量控制pageControl的当前页

    self.pageControl.currentPage = x / kWidth;

    

    NSLog(@"scrollView 减速停止");

}




#pragma mark ------------------pageControl Action---------------

-(void)changePage:(UIPageControl *)pageControl{

    

    //根据pageControl的当前页来设定scrollView的偏移量

    CGPoint point = CGPointMake(pageControl.currentPage * kWidth, 0);

    //scrollView根据pageControl的当前页来计算出来的偏移量进行偏移

    [self.scrollView  setContentOffset:point animated:YES];     // 以恒定速度的动画到新的偏移量

    

    //    NSLog(@"%lu",pageControl.currentPage);

    

    

    

    [self.pageControl updateCurrentPageDisplay];    // 更新控制器当前页码

    CGSize size = [self.pageControl sizeForNumberOfPages:2];    // 通过页数得到控制器大小

    NSLog(@"%f,%f",size.width,size.height);

    

}




- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值