经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » iOS » 查看文章
UIScrollView属性及其代理方法
来源:cnblogs  作者:久依  时间:2019/2/11 9:25:12  对本文有异议

一、UIScrollView是什么?

1、UIScrollView是滚动的view,UIView本身不能滚动,子类UIScrollview拓展了滚动方面的功能。
2、UIScrollView是所有滚动视图的基类。以后的UITableView,UITextView等视图都是继承于该类。
使用场景:显示不下(单张大图);内容太多(图文混排);滚动头条(图片);相册等

二、UIScrollView使用

1、UIScrollview主要专长于两个方面:
  1. a、滚动:contentSize大于frame.size的时候,能够滚动。
  2. b 缩放:自带缩放,可以指定缩放倍数。
2、UIScrollView滚动相关属性contentSize
  1. //定义内容区域大小,决定是否能够滑动
  2. contentOffset //视图左上角距离坐标原点的偏移量
  3. scrollsToTop //滑动到顶部(点状态条的时候)
  4. pagingEnabled //是否整屏翻动
  5. bounces //边界是否回弹
  6. scrollEnabled //是否能够滚动
  7. showsHorizontalScrollIndicator //控制是否显示水平方向的滚动条
  8. showVerticalScrollIndicator //控制是否显示垂直方向的滚动条
  9. alwaysBounceVertical //控制垂直方向遇到边框是否反弹
  10. alwaysBounceHorizontal //控制水平方向遇到边框是否反弹
3、UIScrollView缩放相关属性
  1. minimumZoomScale // 缩小的最小比例
  2. maximumZoomScale //放大的最大比例
  3. zoomScale //设置变化比例
  4. zooming //判断是否正在进行缩放反弹
  5. bouncesZoom //控制缩放的时候是否会反弹
  6. 要实现缩放,还需要实现delegate,指定缩放的视图是谁。
4.UIScrollView滚动实例应用
  1. - (void)scrollView{
  2. // 创建滚动视图,但我们现实的屏幕超过一屏时,就需要滚动视图
  3. UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
  4. scrollView.backgroundColor = [UIColor yellowColor];
  5. scrollView.tag = 1000;
  6. // 设置滚动区域
  7. scrollView.contentSize = CGSizeMake(4 * CGRectGetWidth(self.view.frame), self.view.frame.size.height);
  8. [self.view addSubview:scrollView];
  9. // 添加子视图
  10. for (int i = 0; i < 4; i ++) {
  11. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.frame) * i, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
  12. label.text = [NSString stringWithFormat:@"这是%d个视图",i];
  13. label.font = [UIFont systemFontOfSize:30];
  14. [scrollView addSubview:label];
  15. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]]]; // (有四张片分别取名0.jpg,1.jpg,2.jpg.3.jpg)
  16. [imageView setFrame:self.view.frame];
  17. [label addSubview:imageView];
  18. // label.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:
  19. // arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
  20. }
  21. // 设置分页效果 (默认值为NO)
  22. scrollView.pagingEnabled = YES;
  23. // 设置滚动条是否显示(默认值是YES)
  24. scrollView.showsHorizontalScrollIndicator = YES;
  25. // 设置边界是否有反弹效果(默认值是YES)
  26. scrollView.bounces = YES;
  27. // 设置滚动条的样式
  28. scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
  29. /*
  30. indicatorStyle(枚举值)
  31. UIScrollViewIndicatorStyleDefault, //白色
  32. UIScrollViewIndicatorStyleBlack, // 黑色
  33. */
  34. // 设置scrollView的代理
  35. scrollView.delegate = self; // (记得导入协议代理 <UIScrollViewAccessibilityDelegate>)
  36. }
5、UIScrollView滚动代理方法
  1. // 滚动就会触发
  2. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  3. { NSLog(@"只有scrollview是跟滚动状态就会调用此方法");
  4. }
  5. //开始拖拽时触发
  6. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
  7. NSLog(@"开始拖拽");
  8. }
  9. // 结束拖拽时触发
  10. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
  11. NSLog(@"结束拖拽");
  12. }
  13. // 开始减速时触发
  14. - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
  15. NSLog(@"开始减速");
  16. }
  17. // 结束减速时触发(停止)
  18. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
  19. NSLog(@"结束减速(停止)");
  20. }
6、UIScrollView缩放实例应用
  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. self.view.backgroundColor = [UIColor orangeColor];
  4. // 初始化一个scrollView
  5. UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
  6. scrollView.backgroundColor = [UIColor greenColor];
  7. scrollView.delegate = self;
  8. // 设置缩放比率
  9. // 设置可缩小道德最小比例
  10. scrollView.minimumZoomScale = 0.5;
  11. // 设置可放大的最大比例
  12. scrollView.maximumZoomScale = 2.0;
  13. [self.view addSubview:scrollView];
  14. // 使得要添加的图片宽高成比例
  15. UIImage *myImage = [UIImage imageNamed:@"7.jpg"];
  16. // 得到原始宽高
  17. float imageWidth = myImage.size.width;
  18. float imageHeight = myImage.size.height;
  19. // 这里我们规定imageView的宽为200,根据此宽度得到等比例的高度
  20. float imageViewWidth = 200;
  21. float imageViewHeight = 200 *imageHeight/imageWidth;
  22. // 初始化一个UIimageview
  23. UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, imageViewWidth, imageViewHeight)];
  24. // 为imageView设置图片
  25. imageView.image = myImage;
  26. // 让imageView居中
  27. imageView.center = self.view.center;
  28. imageView.tag = 1000;
  29. [scrollView addSubview:imageView];
  30. }

7、UIScrollView缩放有关的代理

  1. #pragma mark -- 滚动视图与缩放有关的代理方法
  2. //指定scrollview的某一个子视图为可缩放视图,前提条件是次视图已经添加到scrollview上面
  3. -(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
  4. UIView *imageView = (UIView*)[scrollView viewWithTag:1000];
  5. return imageView;
  6. }
  7. // 开始缩放的代理方法 第二个参数view:这个参数使我们将要缩放的视图(这里就是imageView)
  8. - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
  9. NSLog(@"%@",view);
  10. }
  11. // 正在缩放的代理方法 只要在缩放就执行该方法,所以此方法会在缩放过程中多次调用
  12. - (void)scrollViewDidZoom:(UIScrollView *)scrollView{
  13. // 在缩放过程中为了使得该视图一直在屏幕中间,所以我们需要在他缩放的过程中一直调整他的center
  14. // 得到scrollview的子视图
  15. UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:1000];
  16. // 打印imageView的frame,分析为什么他的位置会改变
  17. // NSLog(@"frame -- %@",NSStringFromCGRect(imageView.frame));
  18. // 设置imageview的center,是他的位置一直在屏幕中央
  19. imageView.center = scrollView.center;
  20. // 打印contentSize 分析为什么缩放之后会滑动
  21. NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
  22. }
  23. // 缩放结束所执行的代理方法
  24. /**
  25. * @ view 当前正在缩放的视图
  26. * @ scale 当前正在缩放视图的缩放比例
  27. */
  28. - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
  29. // 缩放完成之后恢复原大小,这里运用到2D仿射变换函数中与捏合有关的函数
  30. view.transform =CGAffineTransformMakeScale(1, 1);
  31. }

原文链接:http://www.cnblogs.com/jiuyi/p/10346269.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号