iOS基础 - UIScrollView
一.UIScrollView使用引导思路。
1.之前我们所学的显示图片是用UIImageView
2.将UIImageView添加到根视图中,不显示的原因:没有设置位置
3.当图片比屏幕大时,直接放在屏幕大小的尺寸中,会被压缩。但是图片会被压缩。
4.我们应该根据图片大小设置UIImageView的尺寸。但是发现屏幕显示的只有图片的一半。
5.怎么才能看的见所有图片内容了,这就需要用到UIScrollView.
6.将图片添加到UIScrollView时,发现还是不能滚动,因为没有设置UIScrollView的滚动视图。
7.设置之后,就能滚动UIScrollView了,而且能看到所有图片内容.
8.UIScrollView设置frame指的是UIScrollView的可视范围。
二.contOffset用来精确控制UIScrollView的滚动位置
三.UIScrollView功能:
1.当图片比屏幕大,为了不让图片被压缩,且能看见,就将图片添加到UIScrollView上面。
2.UIScrollView可以做缩放功能。
四:要想让scrollView有缩放功能。
步骤一:设置scrollView的代理
步骤二:让控制器遵守UIScrollView的协议
步骤三:实现UIScrollView协议的缩放方法。
步骤四:设置UIScrollView的最大和最小缩放比例。
步骤五: 按option键 对图片进行伸缩。
注意协议方法都是以类名开头的。这是苹果官方推荐这样做的
scrollView内部是这样实现缩放功能的。
1.内部调用代理的方法,获取需要缩放的视图。
2.获取缩放视图后,根据手势功能对视图进行缩放。
六.什么是代理
代理两个场合:1.有些事情自己不想做,就交给代理做。
2.想监听某个对象的动作的时候,可以使用代理。
七:UITextField练习思路
步骤一:搭建UI界面。
步骤二:做键盘退出处理.
只要UITextField是一个视图的子视图,就可以用[view endEditing:YES]将键盘退出.
步骤三:用xib描述键盘顶部上面的视图。
步骤四:xib里是一个UIToolBar,里面有一些UIBarButtonItem.
步骤五:设置UITextField顶部视图为xib描述的视图。
textField.inputAccessoryView = xib描述的视图。即可让描述的xib为键盘顶部的工具条。
一、UIScrollView
1.常见属性
@property(nonatomic) CGPoint contentOffset; // 记录UIScrollView滚动的位置
@property(nonatomic) CGSize contentSize; // 内容尺寸(能滚动的范围)
@property(nonatomic) UIEdgeInsets contentInset; // 额外增加的滚动区域(在上下左右4个边缘)
@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; // 代理对象
@property(nonatomic) BOOL bounces; // 是否有弹簧效果
@property(nonatomic) BOOL showsHorizontalScrollIndicator; // 是否显示水平滚动条
@property(nonatomic) BOOL showsVerticalScrollIndicator; // 是否显示垂直滚动条
// tip : 重点掌握contentSize、contentOffset、delegate
2.捏合手势缩放
1> 缩放原理详解
* 当用户尝试缩放UIScrollView的时候,UIScrollView会尝试向它的delegate(代理对象)发送一条消息,询问要缩放哪一个子控件
* 换种说法,也就是说,UIScrollView会尝试调用delegate的某个方法 ,询问要缩放哪一个子控件,并且该方法的返回值就是需要缩放的子控件
2> 缩放原理总结
* UIScrollView先设置delegate对象
* UIScrollView必须知道delegate是通过哪个方法返回需要缩放的子控件,delegate必须实现那个返回需要缩放子控件的方法
* UIScrollView要跟delegate对象协商好:用哪一个方法返回需要缩放的子控件
* 那个返回需要缩放子控件的方法就是:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
3.缩放的一般实现步骤(比如缩放UIScrollView内部的UIImageView)
1> 设置UIScrollView的delegate为控制器(self)
2> 控制器遵守UIScrollViewDelegate协议 <UIScrollViewDelegate>
3> 控制器实现-(UIView *)viewForZoomingInScrollView:方法,返回需要缩放的子控件
4> 设置最大和最小缩放比例
二、代理设计模式
1.使用场合
1> A想让B帮忙做一些事情,就让B成为A的代理
2> A想通知一下B发生了某些事情,或者想传递一些数据给B,就让B成为A的代理
3> B想监听A所做的一些事情,就让B成为A的代理
2.使用步骤
1> 定义一份协议
2> B要遵守协议,实现相应的方法
3> A中要定义一个代理属性 id<协议> delegate;
4> 创建B对象,设置A的delegate属性为B对象
三、键盘处理
1.退出键盘的2种方法
1> 让文本框把键盘退回去(调用UITextField的resignFirstResponder方法)
[textField resignFirstResponder];
2> 一次性退出任何键盘
[self.view endEditing:YES];
2.自定义键盘
@property (readwrite, retain) UIView *inputView;
3.自定义键盘顶部显示的控件
@property (readwrite, retain) UIView *inputAccessoryView;
四、必须掌握
1.UIScrollView的contentOffset、contentSize属性
2.UIScrollView的contentSize和frame.size的区别
3.UIScrollView的常见代理方法
// 当UIScrollView要进行缩放的时候调用,此方法返回需要进行缩放的控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
// 当UIScrollView滚动了就会调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
4.UIPageControl的简单使用
* numberOfPages : 总页数
* currentPage : 当前页码
5.键盘的退出
一、 基本使用
1. 作用:UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看
2. 常见属性
CGSize contentSize :设置UIScrollView的滚动范围
CGPoint contentOffset :UIScrollView当前滚动的位置
UIEdgeInsets contentInset :这个属性可以在四周增加滚动范围
3. 其他属性
BOOL bounces 是否有弹簧效果
BOOL scrollEnabled 是否能滚动
BOOL showsHorizontalScrollIndicator 是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator 是否显示垂直方向的滚动条
UIScrollViewIndicatorStyle indicatorStyle 设定滚动条的样式
BOOL dragging 是否正在被拖拽
BOOL tracking 当touch后还没有拖动的时候值是YES,否则NO
BOOL decelerating 是否正在减速
BOOL zooming 是否正在缩放
二、 手势缩放
- 设置UIScrollView的id<UISCrollViewDelegate> delegate代理对象
- 设置minimumZoomScale :缩小的最小比例
- 设置maximumZoomScale :放大的最大比例
- 让代理对象实现下面的方法,返回需要缩放的视图控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
跟缩放相关的常用方法还有
正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
缩放完毕的时候调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
三、 分页效果
设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转
一般会配合UIPageControl增强分页效果,UIPageControl常用属性:
NSInteger numberOfPages : 总页数
NSInteger currentPage : 当前的页码
BOOL hidesForSinglePage : 当只有一页的时候,是否要隐藏视图
监听UIPageControl的页面改变:
// 添加监听器
[pageControl addTarget:self action:@selector(pageChange:)
forControlEvents:UIControlEventValueChanged];
// 监听方法
- (void)pageChange:(UIPageControl *)pageControl { }
iOS基础 - UIScrollView的更多相关文章
- iOS基础UI控件介绍-Swift版
iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- iOS 基础日记-修饰符
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- iOS程序-UIScrollView的基本使用
iOS程序-UIScrollView的基本使用 scrollView的几个属性contentSize contentOffset contentInset 1.不能向上滑动很可能是因为contentS ...
- iOS 基础:Frames、Bounds 和 CGGeometry
https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
随机推荐
- 移动web开发经验总结(1) (转)
1.<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, minimum-sca ...
- 编程算法 - 阅读完整的文件(C++)
阅读完整的文件(C++) 本文地址: http://blog.csdn.net/caroline_wendy C++: 把文本文件(txt)的全部内容读入字符串(string), 最高效的方法. 代码 ...
- Android手游《》斗地主完整的源代码(支持单机和网络对战)
Android手游<斗地主>完整的源代码(支持单机和网络对战)下载.一个很不错的源代码. 斗地主掌游是一个独特的国内社会斗地主棋牌游戏,之后玩家可以下载网上斗地主和全世界.掌游斗地主特点: ...
- crawler_网络爬虫中编码的正确处理与乱码的解决策略
转载: http://hi.baidu.com/erliang20088/item/9156132bdaeae8949c63d134 最近一个月一直在对nutch1.6版进行中等层次的二次开发,本来是 ...
- php_中替换换行符
//php 有三种方法来解决 //1.使用str_replace 来替换换行 $str = str_replace(array("\r\n", "\r", &q ...
- [CLR via C#]5.4 对象哈希码和dynamic基元类型
原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...
- Windbg Extension NetExt
Windbg Extension NetExt 摘要 : 在使用WINDBG做debugging的时候,需要一个好的工具帮助进行数据分析. 最常见的extension包括SOS, PSSCOR. N ...
- The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types
Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift语言里的数 ...
- java中string和int互相转化
1 怎样将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- jQuery 表格
jQuery 表格插件汇总 本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分 ...