关情纸尾-----IOS学习之UIScrollView

一、UIScrolllView控件的简单介绍

1.什么是UIScrollView

(1)移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限

(2)当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容

(3)普通的UIView不具备滚动功能,不能显示过多的内容

(4)UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容

(5)举例:手机上的“设置”、其他示例程序

2.UIScrollView的简单使用方法

(1)将需要展示的内容添加到UIScrollView中

(2)设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺寸,也就是告诉 它滚动的范围(能滚多远,滚到哪里是尽头)

3.UIScrollView的常用属性

CGPoint contentOffSet 监控目前控件滚动的位置
CGSize contentSize 滚动范围的大小
UIEdgeInserts contentInsert 设置ScrollView的四周边距
id<UIScrollerViewDelagate>delagate 设置协议
BOOL showsHorizontalScrollIndicator 控制是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator 控制是否显示垂直方向的滚动条
float minimumZoomScale 缩小的最小比例
float maximumZoomScale 放大的最大比例
BOOL bouncesZoom 控制缩放的时候是否会反弹

4.几个常用属性示意图

5.如果无法滚动,可能存在以下原因

♥ 没有设置contentSize

♥ scrollEnable = NO

♥ 没有接收到触摸事件:userInteractionEnabled = NO

♥ 没有取消autolayout功能(暂时还不知道如果不取消这个还有没有其他办法耶)

6.容易错误理解的地方

(1)UIScrollView的frame与contentsize属性的区分:UIScrollView的frame指的是这个scrollview的可视范围(可看见的区域),contentsize是其滚动范围。

(2)contentinset(不带*号的一般不是结构体就是枚举),为UIScrollView增加额外的滚动区域。(上,左,下,右)逆时针。contentinset可以使用代码或者是视图控制器进行设置,但两者有区别(注意区分)。

(3)contentsize属性只能使用代码设置。

(4)contentoffset是个CGpoint类型的结构体,用来记录ScrollView的滚动位置,即记录着“框”跑到了哪里。知道了这个属性,就知道了其位置,可以通过设置这个属性来控制这个“框”的移动。

(5)不允许直接修改某个对象内部结构体属性的成员,三个步骤(先拿到值,修改之,再把修改后的值赋回去)。

(6)增加了额外区域后,contentoffset的原点在哪里?实际上是不包括额外区域的。

二、UIScrollView的代理(delegate)

♦很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 或者 停止滚动 时做一些特定的操作

♦要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程

♦当UIScrollView发生一系列的滚动操作时, 会自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况

♦也就是说,要想监听UIScrollView的滚动过程,就必须先给UIScrollView设置一个代理对象,然后通过代理得知UIScrollView的滚动过程

注:要想成为UIScrollView的delegate,是有条件的,必须遵守相应的协议,实现对应的方法才能监听UIScrollView的滚动过程

三、UIScrollView控件实现图片缩放

1.关于缩放

有些时候,我们可能要对某些内容进行手势缩放,如下图

UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理。也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScrollView、

2.缩放原理

当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件(哪一块内容)

当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件。

3.实现缩放功能

(1)控制器遵守代理协议<UIScrollView>

(2)设置代理

(3)调用代理方法,返回需要实现缩放功能的子控件

(4)设置缩放的范围(最大和最小比例)

 1 //当用户开始使用捏合手势的时候
 2 -(UIView *)viewForZoomingInScrolllView:(UIScrollView *)scrollView
 3 {
 4 //返回的控件就是需要缩放的
 5 return self.mimoView;    //mimoView控件已经设置为一个属性
 6 }
 7
 8
 9 //正在使用捏合手势
10 -(void)scrollViewDidZoom:(UIScrollView *)scrollview{
11 }

♥ 小小的做了个笔记,晚安啦 

时间: 2024-08-06 08:59:27

关情纸尾-----IOS学习之UIScrollView的相关文章

关情纸尾-----IOS学习之UITableView

一.基本介绍 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView继承自UIScrollView,因此支持垂直滚动,?且性能极佳 . UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped.这两者操作起来其实并没有本质区别,只是后者按分组样式显示,前者按照普通样式显示而已.先看一下两者的应用: 二.UItableview展示数据的过程 ♥ UITableView需要一个数据源(da

关情纸尾-----IOS学习之超级猜图

超级猜图 1>重点界面可变元素 索引.描述以及图片会随着点击下一题按钮自动更换对应的内容 点击放大按钮或者图片本身可以放大图片,且图片放大后,有一层半透明的遮盖处在图片后面,遮盖住屏幕上的的其他内容点击遮盖或者其图片可以将图片恢复大小,并且遮盖消失. 每次点击下一题按钮,下方的答案框数答案文字选项也随之改变. 点击下方候选答案按钮,此按钮隐身并且按顺序显示到上方的答案框中. 自动判断答案是否填满,填满后检测是否正确,正确显示蓝色,并自动跳到下一题同时加分:错误显示红色. 点击提示按钮,显示正确答

关情纸尾-----关于最近学习iOS开发的一些总结(一)

最近学习做一些小项目的的思路,也了解和掌握了一些新的知识.越深入的学,越觉得学编程不容易,那些大神,真心让我佩服. 一.UIButton 有三种状态 normal(普通状态) 默认情况 对应的枚举常量:UIControlStateNormal highlighted(高亮状态) 按钮被按下去的时候(手指还未松开) 对应的枚举常量:UIControlStateHighlighted disabled(失效状态,不可用状态) 如果enabled属性为NO,就是处于disable状态,代表按钮不可以被

关情纸尾-----Quartz2D简介

1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Mac系统 2.Quartz2D能完成的工作? 画基本线条,绘制文字,图片,截图,自定义UIView. 3.Quartz2D在开发中的价值? 当我们的控件样式极其复杂时,可以把控件内部的结构给画出画,就是自定义控件. 4.什么是图形上下文,上下文的类型有哪些? 图形上下文是用来保存用户绘制的内容状态,并决定绘制到哪个地方的. 用户把绘制好的内容先保存到图形上下文, 然后根据选择的图形上下文的不同,绘制的内容显示到地方也不相同,

关情纸尾-----UIKit基础--QQ自定义布心布局

简述整个项目的开发过程 1.在main.stroybord 中搭建基本界面 2.创建模型,一个是数据模型,一个是frame模型 3.实现对cell操作的封装 4.解决显示时间的细节问题 5.解决聊天内容的背景问题 6.用通知机制监听键盘 7.发送消息 一.在main.stroybord 中搭建基本界面 二.创建模型,一个是数据模型,一个是frame模型 根据message.plist文件创建模型 数据模型ZLMessage 1 #import <Foundation/Foundation.h>

关情纸尾-----Quartz2D定时器CADisplayLink下雪效果

定时器CADisplayLink下雪效果 1.定时器雪花整体思路: 先在控制器View面绘制一个雪花. 在View加载完毕后,添加一个定时器. 在定时器方法当中调用得绘方法. 在绘图方法当不段的去修改雪花的Y值. 当雪花的Y值超过屏幕的高度时,让雪花的Y值重新设为0.从最顶部开始. 2.添加定时器实现方案 第一种采用NSTime 第二种采用CADisplayLink 最终采用CADisplayLink方案. 2.1为什么采用CADisplayLink方案不用NSTime? 首先要了解setNee

关情纸尾-----Quartz2D绘制下载进度条,饼图

绘制下载进度条 1.搭建界面. 2.拖动滑竿的时候让他里面的能够跟着我的拖动,数字在改变. 数字改变时有一个注意点, 就是要显示%,它是一个特殊的符号,要用两个%%代表一个% 3.拖动滑竿的时候就是在上面画弧. 从最上面,按顺时针画,所以,它的起始角度是-90度.结束角度也是-90度 也是从起始角度开始画, 起始角度-90度, 看你下载进度是多少 假如说你下载进度是100,就是1 * 360度 也就是说这个进度占你360度多少分之一 CGContextRef ctx = UIGraphicsGe

关情纸尾-----面向对象的三大特性

面向对象的三大特性 .封装 .继承 .多态 一.封装 1.set方法 (1)作用:提供一个方法给外界设置成员变量,可以在方法里面对参数进行过滤 (2)命名规范: 方法都是以set开头,而且后面要跟上成员变量名,成员变量名的首字母必须是大写 (3)形参名称不要和成员变量同名 (4)返回值一定是void (5)一定要接收一个参数,而且参数类型和成员变量类型一致 2.get方法 (1)作用:返回内部的成员变量 (2)命名规范:方法的名称一般就跟成员变量同名 (3)一定有返回值,并且返回值类型和成员变量

关情纸尾-----Quartz2D-图片添加水印

给图片水印的目的: 告诉别人图片的来源. 防止别人盗用图片.打广告. 添加水印它最终是生成了一个新的图片. 生成图片要用到了图片上下文.不需要再去自定义View, 之前一直在自定义View,是因为要拿跟View相关联的上下文. 跟View相关联的上下文是系统自动帮我们创建的,所以不需要我们自己手动创建, 但是图片上下文需要我们自己去手动创建.还需要我们自己手动去关闭. 实现水印效果的思路: 开启一个和原始图片一样的图片上下文. 把原始图片先绘制到图片上下文. 再把要添加的水印(文字,logo)等