Loading

IOS:个人笔记|UI_UIScrollView基本属性设置,代理方法,图片缩放

     UIScrollView是一个滚动的View.     

    clipsToBounds,超出边框的视图会裁剪掉,默认是YES。
    contentSize,内容区域的尺寸,如果contentSize尺寸小于或者等于ScrollView的尺寸,那么不能滚动
    例如srcollview的size是(400,400),contentSize是(401,401)。可以滚动的距离XY都为1,实际情况滚动会有一种”弹簧“的效果,松开手会回到正常滚动的地方。

     

    UIScrollView无法滚动的一些常见 的原因

    1:没有设置contentSize或者设置的小于scrollview的尺寸
    2:scrollEnabled(默认是YES)被改为NO了
    3:userInteractionEnable,用户交互行为设为NO了

    

     下面是最基本的一些实现

     

 1 UIImage *image=[UIImage imageNamed:@"timg.jpg"];
 2     CGFloat w=image.size.width;
 3     CGFloat h=image.size.height;
 4     UIImageView *imageView=[[UIImageView alloc]init];
 5     imageView.frame=CGRectMake(00, w, h);
 6     imageView.image=image;
 7     UIScrollView *scrollView=[[UIScrollView alloc]init];
 8     scrollView.frame=CGRectMake(1060200200);
 9     
10     scrollView.contentSize=CGSizeMake(w, h);
11     [scrollView addSubview:imageView];
12 
13     [self.view addSubview:scrollView];

 

 

 

 ===============================================

常见的属性
1:bounces弹簧效果
2:alwaysBouncesHorizonal
alwaysBouncesVertical
上面这两个属性,如果在已经设置了contentSize的 情况下,无论设置为Yes,还是NO,都会有弹簧效果。如果在没有设置contensize的时候,是不会滑动的。但设置了这两个属性,就有弹簧的效果(注意因为没设置contentsize,仍然不能滑动,只是有拉动的弹簧效果),可以配合着下拉刷新的场景使用

 1 -(void)setUIScrollView{
 2     //图片大小为240*240
 3     UIImage *image=[UIImage imageNamed:@"timg.jpg"];
 4     CGFloat w=image.size.width;
 5     CGFloat h=image.size.height;
 6     UIImageView *imageView=[[UIImageView alloc]init];
 7     imageView.frame=CGRectMake(00, w, h);
 8     imageView.image=image;
 9     UIScrollView *scrollView=[[UIScrollView alloc]init];
10     scrollView.frame=CGRectMake(1060200200);
11 //    scrollView.contentSize=CGSizeMake(w, h);
12     [scrollView addSubview:imageView];
13     [self.view addSubview:scrollView];
14     //弹簧效果
15 //    scrollView.bounces=NO;
16     scrollView.alwaysBounceVertical=YES;
17     scrollView.alwaysBounceHorizontal=YES;
18     //上面设置了竖直下拉为YES,然后转圈的位置设定在scrollView的X轴上方,然后下拉,转圈就出来了。实际中常用在下拉刷新场景
19     UIActivityIndicatorView *indicator=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
20     indicator.center=CGPointMake(100, -40);
21     [indicator startAnimating];
22     [scrollView addSubview:indicator];
23 }

 

 

 =========================================

showVerticalScrollIndicator
showHorizonalScrollerIndicator
是否显示滚动条,默认是YES

==========================================

contentOffset,内容区域的偏移,可以用来获取实时滑动中滑动的距离。我们可以在屏幕点击事件touchBegan中
写这个实时打印下
注意此处用的是屏幕点击事件中打印偏移量,拖拉趁图片没回原位的时候快速点击看下结果。为了方便观察写在scrollView的代理方法中比较好

1 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
2 {
3     
4     NSLog(@"====偏移量X:%f----Y:%f",_scrollView.contentOffset.x,_scrollView.contentOffset.y);
5 }

 

 

 ==========================================================

contentInset 内边距。
ScrollView.contentInset=UIEdgeInsetsMake(20,20,20,20);
下拉后不会回到原位置,演示如下图。

 

 ====================================================

UIScrollview常见的代理方法

首先,在设置scrollview基本属性的时候,最后加上一句scrollview.delegate=self;

注意:任何对象都i可以成为scrollView的代理,只是一般情况用self控制器本身
代理是弱指针,设置代理对象的时候,需要注意强弱

 

 1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
 2 {
 3     NSLog(@"正在滚动");
 4 }
 5 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 6 {
 7     NSLog(@"要开时拖拽");
 8 }
 9 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
10     NSLog(@"即将停止拖拽");
11     
12 }
13 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
14     if(decelerate)
15     {NSLog(@"已停止拖拽,由于惯性继续滚动");}
16     else
17     {NSLog(@"已停止拖债,停止关东");}
18 }
19 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
20 {
21     NSLog(@"减速完毕停止滚动");
22 }

这些代理方法比较好理解,基本上能做到见名知义。拖动图片看看代理方法的打印输出情况,基本就知道了什么时候会触发。

 

 

 

 =========================================================

内容缩放
先设置scrollview的两个属性,max/minmumZoomScale,放大倍数和缩小倍数。然后实现代理方法,viewforZominginScrollView.
scrollViewDidZoom,监听放大缩小事件,最后返回对象是imageview

在模拟器上运行的时候

alt+鼠标左键,手势按钮反向运动

alt+shirt+鼠标左键,手势按钮同向运动

posted @ 2020-09-18 17:46  DDD-SagerKing  阅读(271)  评论(0编辑  收藏  举报