UIScrollView原理、属性、代理方法及有关功能实现(用纯代码方式)
来源:互联网 发布:软件退税流程图 编辑:程序博客网 时间:2024/09/21 06:34
一、UIScrollView实现原理
滚动原理:通过修改scrollview的bounds.origin。可以通过以下代码验证
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@“frame:%@ *** bounds:%@ *** “,NSStringFromCGRect(self.scrollView.frame),NSStringFromCGRect(self.scrollView.bounds));}
缩放原理:通过修改被缩放视图的transform
二、实现拖拽
1. 在屏幕上放一个UIScrollView
2. 再放一个UIImageView,里面设置一个大图片,然后Size To Fit Content
## 此时能够显示图片,但是不能滚动和缩放
3. 设置UIScrollView的contentSize为图片的尺寸
## 此时图片可以滚动了
*设置 contentSize 其实是在设置 UIScrollView 的滚动范围;不设置contentSize ,UIScrollView 就不知道滚动范围,自然就不能滚动
// UIScrollView 设置滚动的关键代码 // 设置scrollView的contentSize(内容尺寸)为图片框里图片的尺寸 scrollView.contentSize = imageView.image.size;
三、实现缩放
设置UIScrollview的代理,实现代理方法,设置缩放比例,才能进行内容的缩放
1、首先要遵守代理协议
@interface ViewController ()<UIScrollViewDelegate>2、设置代理
scrollView.delegate = self;
3、设置缩放比
scrollView.maximumZoomScale = 2.0; scrollView.minimumZoomScale = 0.2;
4、实现代理方法,告诉UIScrollView要缩放哪一个视图(替 UIScrollView 找出需要缩放的视图)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return _redView;}
四、常用的方法
// 设置contentOffset,可以修改scrollView的滚动位置,并且通过animated参数,可以以动画的方式滚动 [self.scrollView setContentOffset:CGPointMake(400, 300) animated:YES]; // 调用 scrollRectToVisible: 可以让scrollView移动化的方式滚动到一个区域,这个区域一旦显示出来,就停止滚动 [self.scrollView scrollRectToVisible:CGRectMake(400, 600, 100, 100) animated:YES]; // 调用 setZoomScale: 可以以动画的方式自动实现缩放 [self.scrollView setZoomScale:0.5 animated:YES];
// contentInset:在contentSize的基础上增加的额外的滚动范围 scrollView.contentInset = UIEdgeInsetsMake(20, 40, 60, 80);
五、常用属性
//1. 滚动内容属性 //The point at which the origin of the content view is offset from the origin of the scroll view. //内容视图的原点 与 UIScrollView 的 原点 的偏移量 @property(nonatomic) CGPoint contentOffset; //The size of the content view. //滚动视图的尺寸 2. @property(nonatomic) CGSize contentSize; //The distance that the content view is inset from the enclosing scroll view. //内容视图四周附加的滚动举例 3. @property(nonatomic) UIEdgeInsets contentInset; //是否可以滚动 4. @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
六、常用的代理方法及调用的顺序
//返回一个要被缩放的视图,如果delegate为nil,将什么也不发生//return a view that will be scaled. if delegate returns nil, nothing happens-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return _imageView;}//以下是拖拽时调用的方法,//1、开始拖拽时调用-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}//2、滚动中实时调用-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}//3、即将松开拖拽时调用-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ NSLog(@"%s",__func__);}//4、结束拖拽时调用-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"%s",__func__);}//5、松开拖拽时 即将开始减速,调用此方法-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}//6、已经减速 停止滚动时调用-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}//以下是缩放时调用的方法//1、开始缩放时调用-(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{ NSLog(@"%s",__func__);}//2、缩放过程中,实时调用此方法和scrollViewDidScroll-(void)scrollViewDidZoom:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}//3、结束缩放时调用-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ NSLog(@"%s",__func__);}//当scrollView的scrollsToTop属性设置为YES时,点击状态栏,立即滚动到顶部//调用顺序是//1、调用scrollViewShouldScrollToTop-(BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{ NSLog(@"%s",__func__); return YES;}//2、scrollViewDidScroll//3、scrollViewDidScrollToTop,已经滚动到顶部-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ NSLog(@"%s",__func__);}
0 0
- UIScrollView原理、属性、代理方法及有关功能实现(用纯代码方式)
- UIScrollView属性及代理方法总结
- UIScrollView 基本属性 及 常用代理方法
- Swift UIScrollView 属性及代理方法
- UIScrollView代理方法的实现
- UIScrollView常用属性和代理方法
- UIScrollView常用属性/常用代理方法总结
- ios UIScrollView代理方法追踪 及使用
- 01-UIContainerView纯代码实现及原理介绍
- cglib 动态代理 常用功能 原理及实现
- 代理原理及实现
- UIScrollView常用属性及回调方法
- UIScrollView滚动视图属性及方法介绍
- HTTP 代理原理及实现(二)
- HTTP 代理原理及实现(一)
- HTTP 代理原理及实现(一)
- HTTP 代理原理及实现(二)
- HTTP 代理原理及实现(一)
- 卷积理解与思考
- 【干货】一行代码实现自定义转场动画
- 使用FullCalendar做一个自己的日程管理(三)- 持久化篇
- 【Bootstrap3】モーダルに「data-*」属性でデータを渡す
- TortoiseGit使用指南
- UIScrollView原理、属性、代理方法及有关功能实现(用纯代码方式)
- 对并查集的一点点想法..
- ubuntu14.04下CPU版caffe配置小结
- 10022--- 白话MyCat——MyCat部署运行(Linux环境)与使用步骤详解
- Shader特效——“径向模糊”的实现 【GLSL】
- 是时候来了解android7了:多窗口支持
- 矩阵链乘法
- 10023---1号店订单系统水平分库的实践之路以及关键步骤
- Myeclipse中怎样隐藏碍眼的jar包