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 { }