1.之前我们所学的显示图片是用UIImageView
2.将UIImageView添加到根视图中,不显示的原因:没有设置位置
3.当图片比屏幕大时,直接放在屏幕大小的尺寸中,会被压缩。但是图片会被压缩。
4.我们应该根据图片大小设置UIImageView的尺寸。但是发现屏幕显示的只有图片的一半。
5.怎么才能看的见所有图片内容了,这就需要用到UIScrollView.
6.将图片添加到UIScrollView时,发现还是不能滚动,因为没有设置UIScrollView的滚动视图。
7.设置之后,就能滚动UIScrollView了,而且能看到所有图片内容.
8.UIScrollView设置frame指的是UIScrollView的可视范围。
1.当图片比屏幕大,为了不让图片被压缩,且能看见,就将图片添加到UIScrollView上面。
2.UIScrollView可以做缩放功能。
步骤一:设置scrollView的代理
步骤二:让控制器遵守UIScrollView的协议
步骤三:实现UIScrollView协议的缩放方法。
步骤四:设置UIScrollView的最大和最小缩放比例。
步骤五: 按option键 对图片进行伸缩。
注意协议方法都是以类名开头的。这是苹果官方推荐这样做的
scrollView内部是这样实现缩放功能的。
1.内部调用代理的方法,获取需要缩放的视图。
2.获取缩放视图后,根据手势功能对视图进行缩放。
代理两个场合:1.有些事情自己不想做,就交给代理做。
2.想监听某个对象的动作的时候,可以使用代理。
步骤一:搭建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可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看
CGSize contentSize :设置UIScrollView的滚动范围
CGPoint contentOffset :UIScrollView当前滚动的位置
UIEdgeInsets contentInset :这个属性可以在四周增加滚动范围
BOOL bounces 是否有弹簧效果
BOOL scrollEnabled 是否能滚动
BOOL showsHorizontalScrollIndicator 是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator 是否显示垂直方向的滚动条
UIScrollViewIndicatorStyle indicatorStyle 设定滚动条的样式
BOOL dragging 是否正在被拖拽
BOOL tracking 当touch后还没有拖动的时候值是YES,否则NO
BOOL decelerating 是否正在减速
BOOL zooming 是否正在缩放
- (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 { }