iOS大典之UIScrollView

滚动视图

UIScrollView 补充了父类UIView的一些功能

就是滚动的功能


比如 : 相册的滑动切换, 利用UIScrollView的滚动功能就能实现.

以下是个相册例子, 5张照片, View只显示一张照片, 左右切换5张照片

利用重用机制布局视图,


显示3张照片给参考下
相册图片引用摄影师: 一张王义博
喜欢的可以去关注他

这里写图片描述


第一步: AppDelegate中设置


    RootViewController *rootVC = [[RootViewController alloc] init];
    self.window.rootViewController = rootVC;
    [rootVC release];


第二步: 创建根视图控制器 .m中设置

#import "RootViewController.h"

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height


@interface RootViewController ()<UIScrollViewDelegate>

@end

@implementation RootViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    [self addSubViews];  // 调用方法


}

#pragma mark -- 布局子视图 -- 

- (void)addSubViews
{

    UIScrollView *bgScrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    bgScrollView.backgroundColor = [UIColor cyanColor];
    // 设置滑动显示范围
    bgScrollView.contentSize = CGSizeMake(kScreenWidth * (5 + 2), kScreenHeight);

    // 整屏滚动
    bgScrollView.pagingEnabled = YES;
    // 隐藏掉水平小光标
    bgScrollView.showsHorizontalScrollIndicator = NO;

    bgScrollView.contentOffset = CGPointMake(1 * kScreenWidth, 0);

    [self.view addSubview:bgScrollView];
    [bgScrollView release];
    // 设置代理
    bgScrollView.delegate = self;



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

        //  创建小的UIScrollView
        UIScrollView *smallScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0 + kScreenWidth * i, 0, kScreenWidth, kScreenHeight)];
        smallScrollView.tag = 10 + i;
        // 设置缩放属性
        smallScrollView.maximumZoomScale = 2.0;
        smallScrollView.minimumZoomScale = 0.5;
        smallScrollView.delegate = self;

        [bgScrollView addSubview:smallScrollView];
        [smallScrollView release];

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];


        if (i == 0) {
            imageView.image = [UIImage imageNamed:@"3.jpg"];

        }else if (i == 6){

            imageView.image = [UIImage imageNamed:@"1.jpg"];
        }else{
            imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i]];

        }

        [smallScrollView addSubview:imageView];
        [imageView release];

    }




    // 创建滚动条PageControl
    UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, kScreenHeight - 50, kScreenWidth, 50)];
    // 设置5个点
    pageControl.numberOfPages = 5;
    // 设置当前显示第几个
    pageControl.currentPage = 0;
    // 选中与未选中的颜色
    pageControl.pageIndicatorTintColor = [UIColor blackColor];
    pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
    pageControl.tag = 999;


    [self.view addSubview:pageControl];
    [pageControl release];


}



#pragma mark -- 缩放 --
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{

    UIImageView *imageView = scrollView.subviews[0];
    imageView.center = self.view.center;
}
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
    NSLog(@"将要缩放");
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
    NSLog(@"已经结束缩放");
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return scrollView.subviews[0];
}



#pragma mark -- 滑动代理方法 --
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{


    // 获取 当前是第几张
    NSInteger index = scrollView.contentOffset.x / kScreenWidth;
    if (index == 0) {
        // 跳到第三张图
        scrollView.contentOffset = CGPointMake(3 * kScreenWidth, 0);
    }else if (index == 6){
        scrollView.contentOffset = CGPointMake(1 * kScreenWidth, 0);
    }

    // 改变pagecontrol的位置, 偏移量的X坐标除以宽度
    UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:999];

    NSInteger num = scrollView.contentOffset.x / kScreenWidth - 1;

    if (num == 5) {
        pageControl.currentPage = 0;
    } else if (num == -1) {
        pageControl.currentPage = 2;
    }  else
    {
        pageControl.currentPage = num;
    }

}




over


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值