UIScrollView的重要属性总结,以及UIScrollViewDelegate协议的使用
2015-01-26 08:02
405 查看
早就想开通博客 写一些每天工作当中的总结与学习,无奈强迫症的我,非要拖到新年伊始,给自己个记录点... 好回到正题.最近经常有身边的朋友问我一些关于UIScrollView控件的问题,现总结如下,供走在iOS开发道路上的每一位朋友参考.如果出现creash,请各位朋友指出,我必虚心接受并改正.
将UIScrollView的总结分为以下几点:
UIScrollView的继承与初始化
对UIScrollView的理解
UIScrollView的重要属性
UIScrollView的偏移量问题
UIScrollViewDelegate协议
关于UIScrollVIew的应用
UIScrollView的继承与初始化
UIScrollView继承自UIView, 没有自己的初始化方法, 所以调用UIView的初始化方法 initWithFrame:
对UIScrollView的理解
UIScrollView对于刚刚结束iOS的朋友还是比较抽象的.我们可以理解为通过放映机的镜头显示其后面胶片的内容. 设置frame属性即设置镜头的坐标和宽高.
UIScrollView的重要属性:
UIScrollView修改偏移量的方法
使用次方法可以使改变偏移量时有动画效果, 或者可以直接修改contentSize属性, 但没有动画效果.
UIScrollViewDelegate协议
可以在遵循了UIScrollViewDelegate协议的类中重写以下方法:
点击ScrollView并拖拽, 松手, 画面滑到下一页, 停止 的过程中, 执行了: 将要开始拖拽, 正在滚动, 将要结束拖拽, 已经结束拖拽, 将要开始减速, 已经结束减速
当UIScrollView监听到相应事件时, 会让遵循协议的代理人执行scrollViewDidScroll:等方法, 但监听的工作不是代理人做的, 而是UIScrollView做的. 方法中的参数scrollView为当前监听这些方法所代表的事件的ScrollView.
UIScrollViewDelegate协议中还有缩放的方法:
如果需要缩放, 需要遵守协议, 并重写该方法:
缩放的时候本质是改变 contentSize
关于ScrollView的应用
说到ScrollView的应用,一个入门的就是简单的相册
要将小ScrollView的宽高设置为与大ScrollView相等
如果图片尺寸不一样, 且需要将每张设定为特定的尺寸, 则需要将每个装有图片的ImageView单独设置尺寸, 并且须根据图片自己的宽高比以不影响图片显示时的宽高比. 在UIImageView中, 图片是根据UIImageView的尺寸拉伸的.
如果UIImageView的尺寸小于小的ScrollView的contentSize, 也没有关系, 因为在后面可以设置maximumZoomScale属性,
并实现UIScrollViewDelegate协议中viewForZoomingInScrollView:的方法从而可以使之缩放, 而缩放的实质是改变UIScrollView的contentSize属性.
让任何尺寸图片适配ScrollView的方法:
1. 先确定外面大ScrollView的frame
2. 取得图片放到UIImage类型的aImage对象并放到ImageView类型的imageView对象中
3. 设置ImageView的bounds, 分三种情况:
当原图片的 高/宽 > ScrollView 的 高/宽 时, 设图片的高度等于ScrollView的高度, 宽度按比例缩放:
当原图片的 高/宽 < ScrollView 的 高/宽 时, 设图片的宽度等于ScrollView的宽度, 高度按比例缩放:
当原图片的 高/宽 == ScrollView的 高/宽 时, 设图片的宽度等于ScrollView的宽度,图片的高度等于ScrollView的高度:
4. 设定imageView的中心点位置:
5. 生成小的UIScrollView对象, 使其frame = 大UIScrollView对象
将UIScrollView的总结分为以下几点:
UIScrollView的继承与初始化
对UIScrollView的理解
UIScrollView的重要属性
UIScrollView的偏移量问题
UIScrollViewDelegate协议
关于UIScrollVIew的应用
UIScrollView的继承与初始化
NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding> |
对UIScrollView的理解
UIScrollView对于刚刚结束iOS的朋友还是比较抽象的.我们可以理解为通过放映机的镜头显示其后面胶片的内容. 设置frame属性即设置镜头的坐标和宽高.
UIScrollView的重要属性:
@property(nonatomic) CGPoint contentOffset; —> 胶片的偏移量, 胶片相对于镜头左上顶点的偏移大小. 默认为0, 即胶片的左上顶点和镜头的左上顶点重合. 向左移动偏移量为正, 向右移动偏移量为负, 向上为正, 向下为负. @property(nonatomic) CGSize contentSize; —> 胶片的尺寸, 默认为0, 胶片尺寸宽或高为0, 就是和镜头的宽或高相等. @property(nonatomic,assign) id<UIScrollViewDelegate> delegate; —> 代理人, 设置为遵守了UIScrollViewDelegate协议的代理人, 该代理人即可执行监听到的 <UIScrollViewDelegate>协议中定义的方法. @property(nonatomic) BOOL bounces; —> 如果为YES, 滑动时胶片边缘向内超出了镜头的边缘还会弹回去, 如果为NO, 则不会弹回去. 默认为YES. @property(nonatomic) BOOL alwaysBounceVertical; —> 如果此属性和bounces同时为YES, 即使胶片小于镜头, 也允许垂直拖拽. @property(nonatomic) BOOL alwaysBounceHorizontal; —> 如果此属性和bounces同时为YES, 即使胶片小于镜头, 也允许水平拖拽. @property(nonatomic,getter=isPagingEnabled) BOOL pagingEnabled; —> 分页滑动, 如果为YES, 会在每个子视图处停下. 默认为YES. @property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; —> 允许滑动, 如果为YES, 允许滑动, 如果为NO, 不允许滑动. @property(nonatomic) CGFloat minimumZoomScale; —> 最小缩放比例, 指胶片可以缩小为原来的多少倍. 默认为1, 即无法缩小. @property(nonatomic) CGFloat maximumZoomScale; —> 最大缩放比例, 指胶片可以放大为原来的多少倍. 默认为1, 即无法放大, 必须要大于minimumZoomScale才能缩放. @property(nonatomic) CGFloat zoomScale NS_AVAILABLE_IOS(3_0); —> 缩放比例, 指胶片默认为原来的多少倍. 默认为1. |
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; |
UIScrollViewDelegate协议
可以在遵循了UIScrollViewDelegate协议的类中重写以下方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView; —> 正在滚动 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; —> 将要开始拖拽 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0); —> 将要结束拖拽 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; —> 已经结束拖拽 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; —> 将要开始减速 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; —> 已经结束减速 |
当UIScrollView监听到相应事件时, 会让遵循协议的代理人执行scrollViewDidScroll:等方法, 但监听的工作不是代理人做的, 而是UIScrollView做的. 方法中的参数scrollView为当前监听这些方法所代表的事件的ScrollView.
UIScrollViewDelegate协议中还有缩放的方法:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; |
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ NSArray *array = scrollView.subviews; —> 获得当前ScrollView中的所有子视图 return [array firstObject]; —> 返回需要放大的内容 } |
关于ScrollView的应用
说到ScrollView的应用,一个入门的就是简单的相册
要将小ScrollView的宽高设置为与大ScrollView相等
如果图片尺寸不一样, 且需要将每张设定为特定的尺寸, 则需要将每个装有图片的ImageView单独设置尺寸, 并且须根据图片自己的宽高比以不影响图片显示时的宽高比. 在UIImageView中, 图片是根据UIImageView的尺寸拉伸的.
如果UIImageView的尺寸小于小的ScrollView的contentSize, 也没有关系, 因为在后面可以设置maximumZoomScale属性,
并实现UIScrollViewDelegate协议中viewForZoomingInScrollView:的方法从而可以使之缩放, 而缩放的实质是改变UIScrollView的contentSize属性.
让任何尺寸图片适配ScrollView的方法:
1. 先确定外面大ScrollView的frame
2. 取得图片放到UIImage类型的aImage对象并放到ImageView类型的imageView对象中
3. 设置ImageView的bounds, 分三种情况:
当原图片的 高/宽 > ScrollView 的 高/宽 时, 设图片的高度等于ScrollView的高度, 宽度按比例缩放:
if ((aImage.size.height / aImage.size.width) > (self.myScroll.frame.size.height / self.myScroll.frame.size.width)) { imageView.bounds = CGRectMake(0, 0, self.myScroll.frame.size.height / aImage.size.height * aImage.size.width, self.myScroll.frame.size.height); } |
else if ((aImage.size.height / aImage.size.width) < (self.myScroll.frame.size.height / self.myScroll.frame.size.width)){ imageView.bounds = CGRectMake(0,0, self.myScroll.frame.size.width, self.myScroll.frame.size.width / aImage.size.width * aImage.size.height); } |
else if ((aImage.size.height / aImage.size.width) == (self.myScroll.frame.size.height / self.myScroll.frame.size.width)){ imageView.bounds = CGRectMake(0,0, self.myScroll.frame.size.width, self.myScroll.frame.size.height); } |
imageView.center = CGPointMake(self.myScroll.frame.size.width / 2, self.myScroll.frame.size.height / 2); |
相关文章推荐
- iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放
- iOS中UIScrollViewDelegate使用总结
- swift中UIScrollView的使用(常规使用,以及contentInset属性设置)
- UIScrollView控件的常用属性与<UIScrollViewDelegate>协议中各个方法的触发时机
- UI 基础----UIScrollView 的基本属性使用以及代理的使用方法
- ios:UIView动画总结[转]IPhone中UIView中动画及其属性说明[转]详解UIScrollView[转]以及cocos2d框架简介[转]Automator重命名文件介绍[转]
- UIScrollView的属性总结
- UIScrollView的属性总结
- UIScrollView的属性总结
- UIScrollView的属性总结
- IOS--UIScrollView delegate 协议-
- 关于UIScrollViewDelegate协议中每个回调函数的
- 关于UIScrollViewDelegate协议中每个回调函数的意义及执行
- UIScrollView的属性总结
- UIScrollView的属性总结
- iOS: UIScrollView的属性delegate
- UIScrollView的属性总结
- UIScrollView的属性总结
- UIScrollView的属性总结
- UIScrollView的属性总结