zoukankan      html  css  js  c++  java
  • 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+鼠标左键,手势按钮同向运动

  • 相关阅读:
    【WPF】 前言
    【设计模式】 建造者
    拖动调整显示框的显示区域大小
    HTTP权威指南
    input自动获取焦点
    元素JS拖动的实现
    手机端html5触屏事件(touch事件)
    使用".."指定git提交范围与"..."指定git提交范围的区别
    Long-term stable release maintenance
    MEMS--微机电系统
  • 原文地址:https://www.cnblogs.com/kc1995/p/13692552.html
Copyright © 2011-2022 走看看