自学iOS开发系列----UI(视图编程入门:UIScrollView)

本章实现效果一:
HTScrollView

核心代码:

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = @"滚动视图";
    [self createScrollView];
}

/**
 *  滚动视图只是将比它大的UIImageView视图,通过拖拽效果,将UIImageView上的图片信息完整的展示给用户
 *  为了让滚动效果明显,添加图片视图的宽或者高至少比滚动视图的宽高多一个像素
 */
- (void)createScrollView {
    //创建对象
    UIScrollView * scrollView = [[UIScrollView alloc] init];
    //显示位置
    scrollView.frame = CGRectMake(10, 70, self.view.bounds.size.width-20, 400);
    //添加背景颜色
    scrollView.backgroundColor = [UIColor orangeColor];
    //添加UIImageView
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 600, 500)];
    imageView.image = [UIImage imageNamed:@"timg.jpg"];
    [scrollView addSubview:imageView];

    //设置滚动视图的滚动范围, 内容视图的大小
    scrollView.contentSize = imageView.frame.size;
    //关闭自动调节显示位置的属性
    self.automaticallyAdjustsScrollViewInsets = NO;
    //关闭边框回弹效果
    scrollView.bounces = NO;
    //隐藏滚动条
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    //设置内容视图的偏移位置,默认内容视图显示在滚动视图区域的坐标是在内容视图的(0,0)点位置
    scrollView.contentOffset = CGPointMake(200, 100);
    //设置滚动视图的内容视图的缩放效果
    scrollView.delegate = self;
    //设置缩放的倍数
    scrollView.minimumZoomScale = 1.0;
    scrollView.maximumZoomScale = 3.0;
    [self.view addSubview:scrollView];
}

#pragma mark - UIScrollViewDelegate
/**
 *  最常用的协议方法,没有时间点反复调用,当滚动视图滚动时,一直调用
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"x = %f_____y = %f",scrollView.contentOffset.x,scrollView.contentOffset.y);
}

/**
 *  设置滚动视图的缩放效果
 */
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return [[scrollView subviews] objectAtIndex:0];
}

/**
 *  滚动视图拖拽开始调用该方法
 */
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    //获取的是该方法的名称
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

/**
 *  滚动视图拖拽结束调用该方法
 *  不能在该方法中获取最终滚动视图停止内容视图的偏移位置的值,也就是contentoffSet的值
 *  因为滚动视图拖拽结束的时候,还要经历一个内容视图缓慢减速停止的方法,应该在减速停止的方法里获取contentoffSet的值
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

/**
 *  滚动视图减速停止调用的方法
 */
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

本章实现效果二:
轮播图

核心代码:

#import "ViewController.h"
#import "HTConfig.h"

@interface ViewController ()<UIScrollViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self createScrollView];
}

- (void)createScrollView {
    UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    scrollView.bounces = NO;
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.contentSize = CGSizeMake(7 * SCREEN_width, SCREEN_height);
    //设置内容视图初始状态下的偏移位置
    scrollView.contentOffset = CGPointMake(SCREEN_width, 0);

    for (int i = 0; i < 7; i++) {
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(SCREEN_width * i, 0, SCREEN_width, SCREEN_height)];
        if (i == 0) {
            imageView.image = [UIImage imageNamed:@"5.png"];
        }else if (i == 6) {
            imageView.image = [UIImage imageNamed:@"1.png"];
        }else {
            imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i]];
        }
        [scrollView addSubview:imageView];
    }

    scrollView.pagingEnabled = YES;
    //设置代理
    scrollView.delegate = self;
    [self.view addSubview:scrollView];
}

#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x == 6 * SCREEN_width) {
        scrollView.contentOffset = CGPointMake(SCREEN_width, 0);
    } else if (scrollView.contentOffset.x == 0) {
        scrollView.contentOffset = CGPointMake(5 * SCREEN_width, 0);
    }
}

@end

本章实现效果三:
分页控件

核心代码:

#import "ViewController.h"

@interface ViewController ()<UIScrollViewDelegate>

@end

@implementation ViewController {
    UIScrollView * _scrollView;
    UIPageControl * _pageCtr;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = @"分页控件";
    [self createUI];
}

- (void)createUI {
    self.automaticallyAdjustsScrollViewInsets = NO;
    [self createScrollView];
    [self createPageController];
}

- (void)createScrollView {
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 70, self.view.bounds.size.width-20, 350)];
    _scrollView.contentSize = CGSizeMake((self.view.bounds.size.width-20) * 5, 350);
    _scrollView.backgroundColor = [UIColor cyanColor];

    for (int i = 0; i < 5; i++) {
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * (self.view.bounds.size.width-20), 0, self.view.bounds.size.width-20, 350)];
        imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i+1]];
        [_scrollView addSubview:imageView];
    }

    _scrollView.showsHorizontalScrollIndicator = NO;
    _scrollView.bounces = NO;
    //分页效果
    _scrollView.pagingEnabled = YES;
    //设置代理
    _scrollView.delegate = self;
    //缩放比例
    _scrollView.minimumZoomScale = 1.0;
    _scrollView.maximumZoomScale = 3.0f;
    [self.view addSubview:_scrollView];
}

- (void)createPageController {
    //创建分页控件
    _pageCtr = [[UIPageControl alloc] initWithFrame:CGRectMake(50, 350 - 30, 200, 30)];
    //背景颜色
    _pageCtr.backgroundColor = [UIColor blackColor];
    //设置分页控件的总页数
    _pageCtr.numberOfPages = 5;
    //设置初始化分页空间的页码
    _pageCtr.currentPage = 0;
    [self.view addSubview:_pageCtr];
}

#pragma mark - UIScrollViewDelegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    NSLog(@"%@",[[_scrollView subviews] objectAtIndex:_pageCtr.currentPage]);
    return [[_scrollView subviews] objectAtIndex:_pageCtr.currentPage];
}

//减速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    //获取当前的显示页为第几页
    int currentNum = _scrollView.contentOffset.x/_scrollView.frame.size.width;
    //设置当前的显示页码
    _pageCtr.currentPage = currentNum;
}

@end

demo地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值