概述:
UIScrollView(滑动视图) 支持显示超过其自身大小的内容, 支持对视图区域的滑动和缩放功能.UIKit中其子类有UItableView, UICollectionView 和 UITextView
UIScrollView的使用即通过控制其contentView的 bunds 值的改变实现了视图的缩放和移动功能.但是在使用时需要注意的是: 1) 要实现滑动功能 首先要求contentSize必须大于scrollView,实现滑动视图通常伴随着对滑动状态的跟踪; 2) 而要实现缩放功能,需要设置最大/最小缩放比例, 要求首先必须要将缩放视图添加到contentView上, 然后通过协议方法指定别缩放的视图, 一般情况下为了保证在缩放的同时保证被缩放视图始终处于contentView的中心位置,还需要是实现协议方法以调整被缩放视图的中心点.
1. 基本属性
关于内容区域
- (
void
)
setContentOffset:
(
CGPoint
)
contentOffset
animated:
(
BOOL
)
animated
|
(设置偏移量)
(设置偏移量)
(设置内容区域大小)
(设置内容缩进)
|
管理滑动
@property
(
nonatomic
,
getter
=
isScrollEnabled
)
BOOL
scrollEnabled
@property
(
nonatomic
,
getter
=
isDirectionalLockEnabled
)
BOOL
directionalLockEnabled
@property
(
nonatomic
)
BOOL
scrollsToTop
- (
void
)
scrollRectToVisible:
(
CGRect
)
rect
animated:
(
BOOL
)
animated
@property
(
nonatomic
,
getter
=
isPagingEnabled
)
BOOL
pagingEnabled
@property
(
nonatomic
)
BOOL
bounces
@property
(
nonatomic
)
BOOL
delaysContentTouches
@property
(
nonatomic
)
BOOL
canCancelContentTouches
|
是否可滚动
设置是否同时允许双向滚动
是否支持点击顶部即滑动到顶部
设置可见的内容区域(类似于 内容区域缩进, 故可以代替)
是否整页翻动
是否有弹动效果
减速的速率
用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉 touch-down 事件,否则就不捕捉。假如值是NO,当用户触碰, scroll view 会立即触发 touchesShouldBegin:withEvent:inContentView:,默认是 YES
当用户触摸一定时间内没有移动时, 是否允许取消当前操作
|
关于指示器
@property
(
nonatomic
)
BOOL
showsHorizontalScrollIndicator
@property
(
nonatomic
)
BOOL
showsVerticalScrollIndicator
- (
void
)
flashScrollIndicators
|
滚动条类型
滚动条缩进
纵向滚动条
横向滚动条
闪动一下滚动条(当显示scrollView时,调用此方法, 可以实现滚动条闪一下)
|
- (
void
)
setZoomScale:
(
CGFloat
)
scale
animated:
(
BOOL
)
animated
@property
(
nonatomic
)
BOOL
bouncesZoom
|
清扫手势
缩放手势
缩放比例
最大缩放比例
最小缩放比例
是否弹动
|
@property(nonatomic, assign) id< UIScrollViewDelegate > delegate | 代理 |
@property(nonatomic) UIScrollViewKeyboardDismissMode keyboardDismissMode | 键盘消失模式(无/ 开始拖拽时/ 发生交互时) |
2. 协议方法
跟踪滑动交互:
滚动即将开始时执行
-(void)scrollViewWillBeginDragging:· 滚动开始时执行 -(void)scrollViewDidScroll: //滑动视图的偏移量 contentOffset表示的就是scrollView的bounds的起始点坐标的变化,滑动视图之所以能够产生子视图的滑动就是通过不断修改其bounds的起始点来完成自身坐标系的偏移, 坐标系的偏移带动子视图的移动 · 滑动即将结束时执行 -(void)scrollViewWillEndDragging: withVelocity: targetContentOffset · 开始减速时执行 -(void)scrollViewWillEndDecelerating: · 减速结束时触发 -(void)scrollViewDidEndDecelerating · 拖拽结束时执行 -(void)scrollViewDidEndDragging:
willDecelerate:
滑动到顶部时的执行
|
跟踪缩放交互
|
3. 常用实现
实现滑动功能
创建的滑动视图对象
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds];
CGFloat scrollView_Width = CGRectGetWidth(scrollView.bounds);
CGFloat scrollView_Height = CGRectGetHeight(scrollView.bounds);
//添加滑动视图内容
UIView *view = [[UIView alloc] init];
[scrollView addSubviews: view];
//设置必须属性
scrllView.contentSize = CGSizeMake(scrollView_Width * 2 + scrollView_Height * 2);
[self.view addSubviews: scrollView];
[scrollView release];
[view release];
协议方法:实现跟踪滑动情况(开始拖拽/ 结束拖拽/ 开始减速/ 结束减速/ )
|
实现缩放功能
创建的滑动视图对象
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: self.view.bounds];
//设置必需属性
scrollView.minimumZoomScale = 0.5;
scrillView,maximumZoomScale = 1;
//添加缩放内容
UIView *view = [[UIView alloc] init];
[scrollView addSubviews: view];
[self.view addSubviews: scrollView];
[scrollView release];
[view release];
实现协议方法, 指定被缩放的视图. 跟踪缩放, 实时修正被缩放视图位置.
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
//可以通过tag值 或者 子视图获取缩放视图
return [scrollView.contentView subviews[0];
}
- (
void
)scrollViewDidZoom:(
UIScrollView
*)scrollView
{ UIView *ima = [scrollView viewWithTag : 1234 ]; CGFloat wid = scrollView. bounds . size . width ; CGFloat hei = scrollView. bounds . size . height ; // //方法一: // ima.center = CGPointMake(wid / 2, hei / 2); //方法二: CGFloat content_w = scrollView. contentSize . width ;
CGFloat content_h = scrollView.contentSize.height;
CGFloat
delta_x = wid > content_w ? (wid - content_w) /
2
:
0
;
CGFloat delta_y = hei > content_h ? (hei - content_h) / 2 : 0 ; ima. center = CGPointMake (content_w / 2 + delta_x, content_h / 2 + delta_y); NSLog ( @"%f,%f" ,content_w,content_h);
}
|