(八)喜马拉雅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;
}
(八)喜马拉雅Demo引出的细节(代理模式和图片缩放)的更多相关文章
- (五)超级猜图Demo引出的细节
第一部分: 1.按钮的细节,设置背景和前景图片后,要使得背景显示出来,可以设置内边距,影响内部内容. 显示 图片+文字,用button更简单. 问题是,如果不想按钮被点击,在属性面板取消勾选User ...
- 设计模式(八)Dynamic Proxy Parttern 动态代理模式
举例: jdk自带动态代理 javaassit字节码操作库实现 CGLIB ASM底层操作 实际例子: 使用jdk自带动态代理 java.lang.reflect.Proxy 作用 动态生成代理类和对 ...
- JS代理模式实现图片预加载
---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...
- 设计模式之代理模式--PHP
代理模式是常用的设计模式之一,代理模式为对象的间接访问提供了一套方案,可以对对象访问进行控制,也能监控对象访问相关的数据信息. 代理模式(Proxy)就是给某一个对象提供代理,在由代理控制原对象的访问 ...
- 重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 难以跨越的瓶颈期,把你拿捏滴死死的! 编程开发学习过程中遇到的瓶颈期,往往是由于看不 ...
- javascript设计模式学习之六——代理模式
一.代理模式定义 代理模式的关键是:当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问.代理模式需要和本体对外提供相同的接口,对用户来说是透明的.代理模式的种类有 ...
- js设计模式-代理模式
1.什么是设计模式? 设计模式:在软件设计过程中常用的代码规范,针对特定的场景 2.应用场景: 麦当劳点餐 观察者模式 规定的代码格式 花店送花 :代理模式 真实对象(男同学)-----代理对 ...
- java常用设计模式八:代理模式
一.概述 代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 其特征是代理类与委托类有同样的接口,真正的核心业务逻辑还是在实际对象里面. 二.为什么要使用代理模式 当 ...
- Java设计模式(八)Proxy代理模式
一.场景描述 代理在生活中并不少见,租房子需要找中介,打官司需要找律师,很多事情我们需要找专业人士代理我们做,另一方面,中介和律师也代理了房东.法律程序与我们打交道. 当然,设计模式中的代理与广义的代 ...
随机推荐
- NLP系列(1)_从破译外星人文字浅谈自然语言处理基础
作者:龙心尘 &&寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50543337 ht ...
- Servlet - Upload、Download、Async、动态注册
Servlet 标签 : Java与Web Upload-上传 随着3.0版本的发布,文件上传终于成为Servlet规范的一项内置特性,不再依赖于像Commons FileUpload之类组件,因此在 ...
- Hadoop MapReduce工作原理
在学习Hadoop,慢慢的从使用到原理,逐层的深入吧 第一部分:MapReduce工作原理 MapReduce 角色 •Client :作业提交发起者. •JobTracker: 初始化作业,分配 ...
- 无网络环境下安装Dynamics CRM
在安装CRM时会需要很多的组件支持,没有这些组件是没法安装的,一般我们都是选择机器联网后在线安装,但也有特殊情况确实不能联网的,可参考这篇文章 https://blogs.msdn.microsoft ...
- 【一天一道LeetCode】#303.Range Sum Query - Immutable
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 我的个人博客已创建,欢迎大家持续关注! 一天一道le ...
- linux中Cron定时任务系统命令详解
分类:Linux VPS教程 作者:阿川 发布时间:October 13, 2011 有很多同学在购买VPS之后,需要用到计划任务.但是又对计划任务不太了解,所以.今天我们的帮助中心主要是给大家提供一 ...
- 【ShaderToy】基础篇之谈谈点、线的绘制
写在前面 写前面一篇的时候,发现还是不够基础.因此打算增加几篇基础篇,从点线面开始,希望可以更好理解. 其实用Pixel Shader的过程很像在纸上绘画的过程.屏幕上的每一个像素对应了纸上的一个方格 ...
- iOS中 Realm的学习与使用 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...
- (一一五)利用NSKeyedArchiver实现任意对象转为二进制
[应用背景] 在数据库中存储数据时,如果对象过于复杂,又不必要创建复杂的表,可以直接把整个对象转化为二进制存入数据库字段,然后取出后再还原即可. [实现方法] 在PHP中,使用序列化和反序列化可以实现 ...
- 使用maven将项目打成jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...