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
原创粉丝点击