• iOS UI基础05


    • UIScrollView
      • UIScrollView使用的步骤
        • 1.创建UIScrollView
        • 2.将需要展示的内容添加到UIScrollView中
        • 3.设置UIScrollView的滚动范围 (contentSize)
      • 注意: 如果想让UIScrollView进行滚动, 必须设置可以滚动的范围
      • scrollView不能滚动的几种情况
        • 1.没有设置contentSize
        • 2.scrollEnabled属性 = NO
        • 3.userInteractionEnabled属性 = NO
      • enabled和userInteractionEnabled的区别
        • enabled: 代表控件不可用
        • userInteractionEnabled: 代表控件不可以和用户交互, 也就是不能响应用户的操作
      • 常用属性
        • 去滚动条
          • 滚动条也是scrollView的子控件的一部分 //滚动条可能在子控件的前面, 也可能在子控件的后面 //正是因为这个原始, 所以以后在开发中不推荐大家通过subviews获取子控件的方式来操作子控件
            self.scrollView.showsHorizontalScrollIndicator = NO;
            self.scrollView.showsVerticalScrollIndicator = NO;
            
        • 设置滚动条的样式
           self.scrollView.indicatorStyle=UIScrollViewIndicatorStyleWhite;
          
        • 默认下UIScrollView有一个回弹效果 只要设置了contentSize就有回弹效果
          self.scrollView.bounces = YES/NO;
          
        • 哪怕没有设置contentSize也可以有回弹效果
          self.scrollView.alwaysBounceVertical = YES;
          self.scrollView.alwaysBounceHorizontal = YES;
          
        • 设置边距contentInset
          self.scrollView.contentInset = UIEdgeInsetsMake(10, 20, 30, 40);
          
        • 设置内容偏移位(contentOffset)
          • 其实就是设置scrollView滚动到什么地方
          • 告诉scrollView x方向要移动多少, y方向要移动多少
          • 如果x是正数: 图片往左边移动
          • 如果x是负数: 图片往右边移动
          • 同理y是正数: 图片往上移动
          • 同理y是负数: 图片往下移动
          • 计算公式: 永远都是以 控件的左上角 – 内容的左上角
        • 代理方法
          • 只要成为了UIScrollView的代理, 遵守代理协议, 实现协议中的方法
          • 当UIScrollView发生一些变化的时候, 系统就会自动调用这些代理方法
          • 只要UIScrollView滚动了, 系统就会自动调用
            • -(void)scrollViewDidScroll:(UIScrollView *)scrollView
          • 只要用户准备开始拖拽了就会调用
            - -(void)scrollViewWillBeginDragging:(nonnull UIScrollView *)scrollView
            
          • 用户已经结束拖拽, 代表用户已经松手了 系统调用了该方法并不代表着,UIScrollView已经停止滚动了
            - -(void)scrollViewDidEndDragging:(nonnull UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
            
          • 只有执行了这个方法才代表UIScrollView已经停止滚动了
            - -(void)scrollViewDidEndDecelerating:(nonnull UIScrollView *)scrollView
            
            +注意:如果想在UIScrollView停止滚动之后做一些操作, 有两种情况
            • 1.没有惯性的情况: 只会调用 停止拖拽的方法, 不会调用停止减速的方法
            • 2.有惯性的情况: 既会调用 停止拖拽的方法, 也会调用停止减速的方法
            • 所以: 以后要判断UIScrollView是否停止滚动, 需要同时重写两个方法
               + scrollViewDidEndDragging
               + scrollViewDidEndDecelerating
              
    • 缩放
      • 1.成为代理, 通过代理方法告诉UIScrollView要缩放哪一个子控件
        • 在此方法中告诉UISrollView要缩放哪一个控件
          - -(nullable UIView *)viewForZoomingInScrollView:(nonnull UIScrollView *)scrollView
          
      • 2.要想缩放, 除了告诉UISrollView要缩放哪一个控件以外, 还要告诉UISrollView最小能缩多小, 最大能放多大
        self.sc.maximumZoomScale = 2.0; 最大2.0
        self.sc.minimumZoomScale = 0.5;  最小0.5
        
        • 3.缩放的过程中调用和scrollViewDidScroll一样, 只要缩放一点点就会调用
          -(void)scrollViewDidZoom:(nonnull UIScrollView *)scrollView
          
        1. 缩放结束时调用
          -(void)scrollViewDidEndZooming:(nonnull UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale
          
    • UIPageControl

         @property(nonatomic) NSInteger numberOfPages; 设置最大页数
         // default is 0
         @property(nonatomic) NSInteger currentPage;
         设置页码
         // 通过KVC给UIPageControl的私有属性赋值, 设置自定义图片
        [self.pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];
        [self.pageControl setValue:[UIImage imageNamed:@"other"] forKeyPath:@"_pageImage"];
      
    • NSTimer

      // 注意:NSTimer应该是weak
      // 为什么NSTimer应该是weak, 因为只要创建一个NSTimer对象, 该对象就会被主线程强引用
          @property (weak, nonatomic) NSTimer *timer;
      
       // scheduledTimerWithTimeInterval: 创建一个定时器, 并且立即可是计时
        // TimeInterval: 间隔时间
        // target: 调用谁的方法
        // selector: 调用什么方法
        // userInfo: 需要传递什么参数
        // repeats: 是否重复
        // 每隔2.0秒调用一次self的nextPage方法, 并且不传递任何参数
        [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
      
        // 主线程在处理其它事件的时候, 分一点时间来处理NSTimer
        [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
      }
      
       // 只要调用invalidate方法, 系统就会将NSTimer从主线程移除, 并且销毁NSTimer对象
        [self.timer invalidate];
  • 相关阅读:
    hdoj--2098--分拆素数和(枚举)
    hdoj--3594--Cactus(tarjan)
    hdoj--1251--统计难题(字典树)
    hdoj--2534--Score(gcd)
    nyoj--1185--最大最小值(线段树)
    hdoj--1166--敌兵布阵(线段树)
    hdoj--1754--I Hate It(线段树)
    poj--2234--Matches Game(尼姆博弈)
    lightoj--1005--Rooks(组合数)
    SPOJ
  • 原文地址:https://www.cnblogs.com/liujiaoxian/p/4700792.html
Copyright © 2020-2023  润新知