iOS之UIScrollView
来源:互联网 发布:美工做好图怎么上传 编辑:程序博客网 时间:2024/06/11 01:33
UIScrollView
UIScrollView继承自UIView,包含有三个子类:UITableView,UITextView,UICollectionView。UIScrollView是一种容器视图,当内容超出屏幕时,可以提供水平或者垂直滚动条。
下面通过一个例子来对UIScrollView进行一个初步的了解
//创建两个viewController(A和B),在A中实现垂直方向的滚动浏览一组图片,点击图片去到B,然后打开所点击的图片,并且可以水平滚动查看图片- (void)viewDidLoad { [super viewDidLoad];//在A中 /* scrollView出现坐标异常的情况 1.视图控制器在导航控制器中 2.视图控制器的根视图的第一子视图是scrollView */ //首先通过IB将A压入到navigationController中,在storyboard中选中A->选择Editor->Embin->Navigation Controllerif ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0?YES:NO) { self.edgesForExtendedLayout = UIRectEdgeNone;//由于加入了导航控制器,scrollView的坐标会出现异常,加上此句可解决异常问题 }UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];//ScreenWidth,ScreenHeight为宏定义的屏幕宽高 [self.view addSubview:scrollView];//添加图片到mImages数组中NSMutableArray *mImages = [NSMutableArray array]; for (int i = 0; i < 10; i++) { UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"anglebaby%d",i+1]]; [mImages addObject:image]; } //通过双层for循环来创建 //控制行数 int count = 0; if (mImages.count % 3 == 0) { count = (int)mImages.count/3; } else { count = (int)mImages.count/3 + 1; } CGFloat height = (ScreenHeight-64)/2; CGFloat width = ScreenWidth/3; //用来计数,防止数循环超出数组范围 int num = 0; for (int i = 0; i < count; i++) { //控制图片为3列 for (int j = 0; j < 3; j++) { //超过数组元素个数则跳出循环 if (num >= mImages.count) { break; } //创建button UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(width * j, height *i , width, height); //设置button图片 [button setImage:mImages[num] forState:UIControlStateNormal]; //添加点击事件 [button addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchDown]; [scrollView addSubview:button]; num++; button.tag = 101 + num; } } //设置scrollView内容大小,该处只要在垂直方向上滚动,所以width为0 scrollView.contentSize = CGSizeMake(0, height * count + 64); //隐藏滚动条 scrollView.showsVerticalScrollIndicator = NO; //把self作为scrollView的代理 scrollView.delegate = self;}//点击事件方法- (void)clickAction:(UIButton *)sender { self.bvc = [[BViewController alloc] init]; //push到B [self.navigationController pushViewController:self.bvc animated:YES]; NSLog(@"%lu",sender.tag); //传值 self.bvc.tag = sender.tag;}//指示当用户点击状态栏候,滚动视图是否能够滚动到顶部,需要设置scrollView.scrollToTop = YES;//默认YES- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { return YES;}- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { NSLog(@"%s",__func__);}//在B中- (void)viewDidLoad { [super viewDidLoad];// NSLog(@"1"); if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0? YES:NO) {//三目运算符 // self.automaticallyAdjustsScrollViewInsets = NO;//自动调整scrollView坐标异常 self.edgesForExtendedLayout = UIRectEdgeNone; } //滚动视图 _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight-64)]; // scrollView.backgroundColor = [UIColor yellowColor]; _scrollView.delegate = self; [self.view addSubview:_scrollView]; _mImages = [NSMutableArray array]; for (int i = 0; i < 10; i++) { UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"anglebaby%d",i+1]]; [_mImages addObject:image]; } [self.mImages insertObject:[UIImage imageNamed:@"anglebaby10"] atIndex:0]; [self.mImages insertObject:[UIImage imageNamed:@"anglebaby1"] atIndex:11]; //控制滚动范围的属性 _scrollView.contentSize = CGSizeMake(ScreenWidth*_mImages.count, 0); _scrollView.tag = 1000; [_scrollView setContentOffset:CGPointMake(ScreenWidth*(self.tag-102+1), 0) animated:YES]; for (int i = 0; i < _mImages.count; i++) { _smallScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(ScreenWidth*i, 0, ScreenWidth, ScreenHeight-64)]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.smallScrollView.bounds]; imageView.image = _mImages[i];// imageView.contentMode = UIViewContentModeScaleAspectFit; [_smallScrollView addSubview:imageView]; [_scrollView addSubview:_smallScrollView]; //控制最大缩放比例 _smallScrollView.maximumZoomScale = 2.0; //控制最小缩放比例 _smallScrollView.minimumZoomScale = 1.0; _smallScrollView.delegate = self; //关闭边界回弹效果 _smallScrollView.bounces = NO; } //按页滚动 _scrollView.pagingEnabled = YES; //水平方向滚动条 _scrollView.showsHorizontalScrollIndicator = NO; self.view.backgroundColor = [UIColor whiteColor]; //初始化pageControl _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake((ScreenWidth-200)/2, ScreenHeight-100, 200, 30)]; _pageControl.numberOfPages = self.mImages.count; _pageControl.currentPage = self.tag-102; [_pageControl addTarget:self action:@selector(pageControlAction:) forControlEvents:UIControlEventValueChanged]; _pageControl.backgroundColor = [UIColor blackColor]; [self.view addSubview:_pageControl];}//UIScrollViewDelegate协议- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { UIImageView *imgView = [scrollView.subviews objectAtIndex:0]; return imgView;}- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { NSLog(@"%s",__func__);}- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { NSLog(@"%s",__func__);}- (void)scrollViewDidZoom:(UIScrollView *)scrollView { NSLog(@"%s",__func__);}//只要是拖拽scrollView就会触发这个方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"%s",__func__); if (scrollView.contentOffset.x < ScreenWidth-30) { [scrollView setContentOffset:CGPointMake(ScreenWidth * 10, 0) animated:NO]; } else if (scrollView.contentOffset.x > ScreenWidth*11+30) { [scrollView setContentOffset:CGPointMake(ScreenWidth, 0) animated:NO]; }}//开始拖拽的时候会触发这个方法- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { NSLog(@"%s",__func__);}//将要结束拖拽的时候会触发这个方法- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { NSLog(@"%s",__func__);}//当结束多拽的时候会触发这个方法- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { NSLog(@"结束拖拽");}//当滚动减速的时候会触发这个方法- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { NSLog(@"减速滚动");}//当滚动彻底停止的时候会触发这个方法- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { UIScrollView *bigScrollView = (UIScrollView *)[self.view viewWithTag:1000]; int page = bigScrollView.contentOffset.x/ScreenWidth; _pageControl.currentPage = page; NSLog(@"滚动停止");}//当滚动视图动画完成后,调用该方法,如果没有动画,那么该方法不被调用- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { NSLog(@"%s",__func__);}//指示当用户点击状态栏候,滚动视图是否能够滚动到顶部,需要设置scrollView.scrollToTop = YES;- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { return YES;}- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView { NSLog(@"%s",__func__);}- (void)pageControlAction:(UIPageControl *)sender { NSLog(@"%ld",sender.currentPage);}
0 0
- IOS之UIScrollView详解
- iOS UIScrollView之contentOffset
- iOS开发之UIScrollView
- iOS之UIScrollView详解
- IOS学习之UIScrollView
- 9.ios之UIScrollView
- iOS总结之UIScrollView
- iOS大典之UIScrollView
- iOS组件之UIScrollView
- IOS 之 UIScrollView,UIPageControl
- iOS之UIScrollView
- iOS UIScrollView之contentOffset
- iOS UIScrollView之contentOffset
- iOS之UISCrollView--原理
- IOS开发之UIScrollVIew运用
- ios 实战训练之UIScrollView
- 【IOS控件详解】之UIScrollView
- IOS开发之UIScrollVIew运用
- 程序员在上海之一
- Android浏览器打开本地app前端同学的两种配置方式Url scheme和Android intent
- 对于继承的笔记
- Unity3D 5.x 启动过程中 License Error 解决办法
- Imageview设置宽高充满父容器(屏幕)
- iOS之UIScrollView
- (笔记)Spring实战_面向切面的Spring(4)_注解切面
- go命令中的三个点含义
- 第五周项目二(3)发工资
- 树链剖分水题I
- 相似图片检测:感知哈希算法之dHash的Python实现
- 多路分支语句、已知次数循环
- 软工视频——软件开发模型
- Makefile简单使用的例子