本章实现效果一:
核心代码:
#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(, , self.view.bounds.size.width-, );
//添加背景颜色
scrollView.backgroundColor = [UIColor orangeColor];
//添加UIImageView
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , , )];
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(, );
//设置滚动视图的内容视图的缩放效果
scrollView.delegate = self;
//设置缩放的倍数
scrollView.minimumZoomScale = ;
scrollView.maximumZoomScale = ;
[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:];
}
/**
* 滚动视图拖拽开始调用该方法
*/
- (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( * SCREEN_width, SCREEN_height);
//设置内容视图初始状态下的偏移位置
scrollView.contentOffset = CGPointMake(SCREEN_width, );
for (int i = ; i < ; i++) {
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(SCREEN_width * i, , SCREEN_width, SCREEN_height)];
if (i == ) {
imageView.image = [UIImage imageNamed:@"5.png"];
}else if (i == ) {
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 == * SCREEN_width) {
scrollView.contentOffset = CGPointMake(SCREEN_width, );
} else if (scrollView.contentOffset.x == ) {
scrollView.contentOffset = CGPointMake( * SCREEN_width, );
}
}
@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(, , self.view.bounds.size.width-, )];
_scrollView.contentSize = CGSizeMake((self.view.bounds.size.width-) * , );
_scrollView.backgroundColor = [UIColor cyanColor];
for (int i = ; i < ; i++) {
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * (self.view.bounds.size.width-), , self.view.bounds.size.width-, )];
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",i+]];
[_scrollView addSubview:imageView];
}
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.bounces = NO;
//分页效果
_scrollView.pagingEnabled = YES;
//设置代理
_scrollView.delegate = self;
//缩放比例
_scrollView.minimumZoomScale = ;
_scrollView.maximumZoomScale = f;
[self.view addSubview:_scrollView];
}
- (void)createPageController {
//创建分页控件
_pageCtr = [[UIPageControl alloc] initWithFrame:CGRectMake(, - , , )];
//背景颜色
_pageCtr.backgroundColor = [UIColor blackColor];
//设置分页控件的总页数
_pageCtr.numberOfPages = ;
//设置初始化分页空间的页码
_pageCtr.currentPage = ;
[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