zoukankan      html  css  js  c++  java
  • (八)喜马拉雅Demo引出的细节(代理模式和图片缩放)

    喜玛拉雅是一款电台APP,界面非常美观,通过模仿这一APP学习到很多细节。

    1.图片导入后有些框内不全如何补全:

    寻常的办法是再准备一张图片拖入,比较好的办法是右击已经导入的图片选择Show in Finder,通过编辑Contents.json文件来修改。

    2.如何确定UIScrollView的总体尺寸:

    根据尽头的控件尺寸和位置。

    使用方法CGRectGetMaxY,传入尽头控件的frame,即可算出Y的滚动范围,X同理。

    3.做出ScrollView穿透效果

    新建一个View,置于Scroll下面(注意要拖动ScrollView才能放到下面,直接拖到View会被放入ScrollView),然后修改透明度。

    4.ScrollView的contentSize属性,对于不需要拖动的区域,例如width,直接写0即可,不必写成视图宽度。

    5.ScrollView的其他属性

    showHorzontalScrollIndicator和showVerticalScrollIndicator表示是否显示水平和垂直滚动条。

    bounces表示需要弹簧效果。


    使用ScrollView实现捏合手势图片的缩放

    模拟器中实现两指手势:按住option键再拖动。

    需要使用代理设计模式(又叫委托设计模式)。

    引入:想在UIScrollView正在滚动或者滚动到某个位置的时候做一些事情,前提条件是能够监听UIScrollView的整个滚动过程。

    在UIScrollView中有一个代理属性delegate,当UIScrollView发生一系列滚动操作,会自动通知delegate对象,让代理知道它的滚动情况。

    @property(nonatomic,assign) id<UIScrollViewDelegate>      delegate;  

    可见它的delegate遵循UIScrollViewDelegate协议(方法的集合)。id类型可见,任何对象都可以监听。

    Tip:协议中的方法,如果声明为@optional,不实现不会报错,没有声明为@optional的必须全部实现。

    监听条件:必须实现协议中的方法。

    Tip:在OC中,发送消息的含义就是调用方法。

    用户开始拖拽,调用scrollViewWillBeginDragging:方法。

    滚动到具体位置,调用scrollViewDidScroll:方法。

    用户停止拖拽,调用scrollViewDidEndDragging:willDecelerate方法

    Tip:注意冒号是方法名的一部分!

    一般是用控制器监听。

    1.声明监听:

    @interface ViewController ()  <UIScrollViewDelegate>
    
    @end
    

    2.代理设置:

    self.scrollView.delegate = self;
    3.实现方法:

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
        NSLog(@"Begin Drag");
    }

    注意体会代理设计模式的作用和好处。

    作用:某个对象监听到另一个对象的状态,或者说某个对象的状态改变想通知另一个对象。


    当用户在UIScrollView身上使用捏合手势的时候,UIScrollView会给代理发消息,询问代理究竟要缩放自己内部的哪个子控件。一次性只能缩放一个子控件。

    通过方法viewForZoomingInScrollView,返回UIView *(需要缩放的控件)。

    除此之外,还有设置最大和最小缩放比例。

    self.scrollView.maximumZoomScale = 2.0;
    self.scrollView.minimumZoomScale = 0.2;

    然后实现方法,返回要缩放的控件:

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
        return self.imageView;
    }


  • 相关阅读:
    InfluxDB 安装使用
    Jenkins 覆盖率插件Cobertura 使用
    sonarqube的安装部署以及集成jenkins
    vscode md样式自定义
    maven配置JaCoCo
    jenkins 安装
    Maven 构建报依赖jar下载失败
    Telegraf 简单使用
    Python 生成当前项目依赖包 requirements
    面试内容
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154245.html
Copyright © 2011-2022 走看看