UIPageControl, UIScrollView属性及UIScrollViewDelegate详解
来源:互联网 发布:hadoop结构化数据存储 编辑:程序博客网 时间:2024/06/11 13:10
UIPageControl, UIScrollView属性
#import "RootView.h"@implementation RootView- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self createSubviews]; } return self;}- (void)createSubviews{ self.backgroundColor = [UIColor blackColor]; // UIPageControl UIPageControl *pageC = [[UIPageControl alloc] initWithFrame:CGRectMake(50, 500, 200, 30)]; pageC.backgroundColor = [UIColor orangeColor]; // 需要设置个数才会生效 pageC.numberOfPages = 10; // 赋值时 - 默认初始位置 // 读取时 - 当前所在位置 pageC.currentPage = 5; // 未选中时点的颜色 pageC.pageIndicatorTintColor = [UIColor redColor]; // 选中时点的颜色 pageC.currentPageIndicatorTintColor = [UIColor blueColor]; [pageC addTarget:self action:@selector(pageAction:) forControlEvents:UIControlEventValueChanged]; [self addSubview:pageC]; [pageC release]; // 2, UIScrollView - 重点!!!!!!!! UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:self.frame];#pragma 重要, 核心属性 // 横向设置19的图片位 scroll.contentSize = CGSizeMake(self.frame.size.width * 19, 0); // 使能按页翻动 scroll.pagingEnabled = YES;// // 关闭边缘反弹// scroll.bounces = NO;#pragma 重要, 实用属性 // 偏移 - 当前显示的图片槽 scroll.contentOffset = CGPointMake(self.frame.size.width * 3, 0); // 使能调到最顶端的功能 scroll.scrollsToTop = YES; // 是否允许滑动(默认允许) scroll.scrollEnabled = NO; // 水平/垂直跟随条 scroll.showsHorizontalScrollIndicator = NO; scroll.showsVerticalScrollIndicator = NO; /****************************** 缩放部分**************************/ // 最小/最大缩放倍数 scroll.minimumZoomScale = 0.5; scroll.maximumZoomScale = 10; // 注意! 要实现缩放功能需要签订协议 scroll.delegate = self; /********************************************************************/ [self addSubview:scroll]; [scroll release]; for (NSInteger i = 0; i < 19; i++) { // 注意: 1. 先看图片序号的命名格式1 or 01; 2. 再看图片的起始序号0 or 1 NSString *fileName = [NSString stringWithFormat:@"image%ld", i + 1]; NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"jpg"]; UIImage *image = [UIImage imageNamed:filePath]; // 注意: imageV的x坐标 UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width * i, 0, self.frame.size.width, self.frame.size.height)]; imageV.image = image; // for循环的最终目的 - 创建19个imageView, 分别添加到scroll的槽里 [scroll addSubview:imageV]; } pageC = [[UIPageControl alloc] initWithFrame:CGRectMake(50, 600, self.frame.size.width - 50 * 2, 30)]; pageC.numberOfPages = 19; // 注意, page的起点与scroll的初始偏移量一样 pageC.currentPage = scroll.contentOffset.x / self.frame.size.width; [pageC addTarget:self action:@selector(pageAction:) forControlEvents:UIControlEventValueChanged]; [self addSubview:pageC]; [pageC release];}#pragma 重要, 一般结束状态的处理可在此方法中进行- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"结束减速时触发"); NSLog(@"%f", scrollView.contentOffset.x);}/***************************** 缩放相关方法 ***************************/// 允许哪个页面缩放- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return [scrollView.subviews objectAtIndex:0];}- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ [[scrollView.subviews objectAtIndex:0] setCenter:CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)];}- (void)scrollViewDidZoom:(UIScrollView *)scrollView{ NSLog(@"缩放操作时触发"); // 将缩放时图片的中心点设置为屏幕的中心点 [[scrollView.subviews objectAtIndex:0] setCenter:self.center];}/********************************************************************/- (void)pageAction:(UIPageControl *)sender{}
UIScrollView中添加可用于缩放的subScrollView
#import "RootView.h"@implementation RootView- (void)dealloc{ [_scrollV release]; [super dealloc];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self createSubvuews]; } return self;}- (void)createSubvuews{ self.scrollV = [[UIScrollView alloc] initWithFrame:self.frame]; self.scrollV.contentSize = CGSizeMake(self.frame.size.width *19, 0); for (NSInteger i = 0; i < 19; i++) { // 创建subScrollV 为了缩放 UIScrollView *subScrollV = [[UIScrollView alloc] initWithFrame:CGRectMake(self.frame.size.width * i, 0, self.frame.size.width, self.frame.size.height)]; subScrollV.minimumZoomScale = 0.5; subScrollV.maximumZoomScale = 5; // 缩放比例// subScrollV.zoomScale = 1.0; subScrollV.delegate = self; [self.scrollV addSubview:subScrollV]; [subScrollV release]; NSString *fileName = [NSString stringWithFormat:@"image%ld", i + 1]; NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"jpg"]; UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; imageV.image = [UIImage imageWithContentsOfFile:filePath]; [subScrollV addSubview:imageV]; [imageV release]; } // scrollV负责移动拖拽, subScrollV负责缩放 self.scrollV.delegate = self; self.scrollV.pagingEnabled = YES; [self addSubview:self.scrollV]; [_scrollV release];}#pragma 触摸的过程 - 开始拖拽(手指触摸) -> 结束拖拽(松开手指)-> 减速开始(回弹的过程) -> 减速结束(图片最终稳定下来)- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ self.preIndex = scrollView.contentOffset.x / self.frame.size.width;}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSInteger curIndex = self.scrollV.contentOffset.x / self.frame.size.width; if (self.preIndex != curIndex) { [[self.scrollV.subviews objectAtIndex:self.preIndex] setZoomScale:1.0]; } // [[scrollView.subviews objectAtIndex:self.preIndex] setZoomScale:1.0]; // NSLog(@"所在页码%f", scrollView.contentOffset.x / self.frame.size.width);}- (void)scrollViewDidZoom:(UIScrollView *)scrollView{ // 保证缩放在中心位置 [scrollView.subviews.firstObject setCenter:self.center];}// 允许哪个视图缩放- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ // 当前的scrollView是subScrollView return scrollView.subviews.firstObject;}@end
UIScrollViewDelegate中的各种方法
//scrollView滚动时,就调用该方法。任何offset值改变都调用该方法。即滚动过程中,调用多次 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"scrollViewDidScroll"); CGPoint point=scrollView.contentOffset; NSLog(@"%f,%f",point.x,point.y); // 从中可以读取contentOffset属性以确定其滚动到的位置。 // 注意:当ContentSize属性小于Frame时,将不会出发滚动}
// 当scrollView缩放时,调用该方法。在缩放过程中,回多次调用- (void)scrollViewDidZoom:(UIScrollView *)scrollView{ NSLog(@"scrollViewDidScroll"); float value=scrollView.zoomScale; NSLog(@"%f",value);}
// 当开始滚动视图时,执行该方法。一次有效滑动(开始滑动,滑动一小段距离,只要手指不松开,只算一次滑动),只执行一次。- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"scrollViewWillBeginDragging");}
// 滑动scrollView,并且手指离开时执行。一次有效滑动,只执行一次。// 当pagingEnabled属性为YES时,不调用,该方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ NSLog(@"scrollViewWillEndDragging");}
// 滑动视图,当手指离开屏幕那一霎那,调用该方法。一次有效滑动,只执行一次。// decelerate,指代,当我们手指离开那一瞬后,视图是否还将继续向前滚动(一段距离),经过测试,decelerate=YES- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"scrollViewDidEndDragging"); if (decelerate) { NSLog(@"decelerate"); }else{ NSLog(@"no decelerate"); } CGPoint point=scrollView.contentOffset; NSLog(@"%f,%f",point.x,point.y);}
// 滑动减速时调用该方法。- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ NSLog(@"scrollViewWillBeginDecelerating"); // 该方法在scrollViewDidEndDragging方法之后。}
// 滚动视图减速完成,滚动将停止时,调用该方法。一次有效滑动,只执行一次。- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"scrollViewDidEndDecelerating"); [_scrollView setContentOffset:CGPointMake(0, 500) animated:YES];}
// 当滚动视图动画完成后,调用该方法,如果没有动画,那么该方法将不被调用- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ NSLog(@"scrollViewDidEndScrollingAnimation"); // 有效的动画方法为: // - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 方法 // - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 方法}
// 返回将要缩放的UIView对象。要执行多次- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ NSLog(@"viewForZoomingInScrollView"); return self.imgView;}
// 当将要开始缩放时,执行该方法。一次有效缩放,就只执行一次。- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{ NSLog(@"scrollViewWillBeginZooming");}
// 当缩放结束后,并且缩放大小回到minimumZoomScale与maximumZoomScale之间后(我们也许会超出缩放范围),调用该方法。- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{ NSLog(@"scrollViewDidEndZooming");}
// 指示当用户点击状态栏后,滚动视图是否能够滚动到顶部。需要设置滚动视图的属性:_scrollView.scrollsToTop=YES;- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{ return YES;}
// 当滚动视图滚动到最顶端后,执行该方法- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ NSLog(@"scrollViewDidScrollToTop");}
判断uiscrollview是向上滚动还是向下滚动
int _lastPosition; //A variable define in headfile - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ int currentPostion = scrollView.contentOffset.y; if (currentPostion - _lastPosition > 25) { _lastPosition = currentPostion; NSLog(@"ScrollUp now"); } else if (_lastPosition - currentPostion > 25) { _lastPosition = currentPostion; NSLog(@"ScrollDown now"); } }// 25 可以是任意数字,可根据自己的需要来设定。
// 升级版:到达顶部或底部时不会反弹- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ int currentPostion = scrollView.contentOffset.y; if (currentPostion - _lastPosition > 20 && currentPostion > 0) { //这个地方加上 currentPostion > 0 即可) _lastPosition = currentPostion; NSLog(@"ScrollUp now"); } else if ((_lastPosition - currentPostion > 20) && (currentPostion <= scrollView.contentSize.height-scrollView.bounds.size.height-20) ){ _lastPosition = currentPostion; NSLog(@"ScrollDown now"); }}
0 0
- UIPageControl, UIScrollView属性及UIScrollViewDelegate详解
- 爬爬爬之路:UI(七) UIScrollView,UIScrollViewDelegate UIPageControl 方法总结
- UIScrollView、UIPageControl的属性总结
- IOS UIScrollView 说明 和 UIScrollViewDelegate详解
- UIScrollView及UIPageControl的使用
- UIScrollView的重要属性总结,以及UIScrollViewDelegate协议的使用
- UIScrollView、UIPageControl
- UIScrollView--UIPageControl
- UIScrollView、UIPageControl
- UIPageControl+UIScrollView
- UIScrollView,UIPageControl
- UIScrollView+UIPageControl
- UIScrollView、UIPageControl
- UIScrollView&UIPageControl
- UIScrollView/UIPageControl/
- UIScrollView && UIPageControl
- UIScrollView UIPageControl
- UIScrollView && UIPageControl
- 黑马程序员——Java之内部类
- 排序算法一览
- leetcode_3sum closet
- 工厂模式
- hdu 3450 离散化+dp+线段树优化
- UIPageControl, UIScrollView属性及UIScrollViewDelegate详解
- 获取 Activity 的返回参数
- Android 热更新——非侵入AOP框架
- iOS唯一表示符获取方案
- 计算机网络面试题
- 上海Spark Meetup第六次聚会
- 【内容建设】以DEDECMS为例,讲解站内文章编辑的一些注意点,有益无害
- 找工作C++面试资料之问答题整理(1)
- SpringMVC搭建------最简单的实现