UIScrollView(滑动视图)

概述: 
    UIScrollView(滑动视图)  支持显示超过其自身大小的内容, 支持对视图区域的滑动和缩放功能.UIKit中其子类有UItableView, UICollectionView 和 UITextView
    UIScrollView的使用即通过控制其contentView的 bunds 值的改变实现了视图的缩放和移动功能.但是在使用时需要注意的是: 1) 要实现滑动功能 首先要求contentSize必须大于scrollView,实现滑动视图通常伴随着对滑动状态的跟踪;  2) 而要实现缩放功能,需要设置最大/最小缩放比例, 要求首先必须要将缩放视图添加到contentView上, 然后通过协议方法指定别缩放的视图, 一般情况下为了保证在缩放的同时保证被缩放视图始终处于contentView的中心位置,还需要是实现协议方法以调整被缩放视图的中心点.
1. 基本属性

关于内容区域
- ( void ) setContentOffset: ( CGPoint ) contentOffset
                animated: ( BOOL ) animated          
@property ( nonatomic )   CGPoint  contentOffset       
@property ( nonatomic )   CGSize  contentSize          
@property ( nonatomic )   UIEdgeInsets  contentInset                      

(设置偏移量)

(设置偏移量)
(设置内容区域大小)
(设置内容缩进)
管理滑动
@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 )   CGFloat  decelerationRate
@property ( nonatomic )   BOOL   delaysContentTouches


@property ( nonatomic )   BOOL   canCancelContentTouches

是否可滚动

设置是否同时允许双向滚动
是否支持点击顶部即滑动到顶部

设置可见的内容区域(类似于 内容区域缩进, 故可以代替)
是否整页翻动
是否有弹动效果
减速的速率
用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉 touch-down 事件,否则就不捕捉。假如值是NO,当用户触碰, scroll view 会立即触发 touchesShouldBegin:withEvent:inContentView:默认是 YES
当用户触摸一定时间内没有移动时, 是否允许取消当前操作
关于指示器
@property ( nonatomic )   UIScrollViewIndicatorStyle  indicatorStyle
@property ( nonatomic )   UIEdgeInsets  scrollIndicatorInsets
@property ( nonatomic )   BOOL   showsHorizontalScrollIndicator
@property ( nonatomic )   BOOL   showsVerticalScrollIndicator
- ( void ) flashScrollIndicators

滚动条类型
滚动条缩进
纵向滚动条
横向滚动条
闪动一下滚动条(当显示scrollView时,调用此方法, 可以实现滚动条闪一下)
@property ( nonatomic ,   readonly )   UIPanGestureRecognizer  * panGestureRecognizer
@property ( nonatomic ,   readonly )   UIPinchGestureRecognizer  * pinchGestureRecognizer
@property ( nonatomic )   CGFloat  zoomScale
- ( void ) setZoomScale: ( CGFloat ) scale
            animated: ( BOOL ) animated
@property ( nonatomic )   CGFloat  maximumZoomScale
@property ( nonatomic )   CGFloat  minimumZoomScale
@property ( nonatomic )   BOOL   bouncesZoom
清扫手势

缩放手势

缩放比例


最大缩放比例
最小缩放比例
是否弹动
@property(nonatomic, assign) id< UIScrollViewDelegate > delegate  代理
@property(nonatomic) UIScrollViewKeyboardDismissMode keyboardDismissMode 键盘消失模式(无/ 开始拖拽时/ 发生交互时)

2. 协议方法

跟踪滑动交互:

滚动即将开始时执行
-(void)scrollViewWillBeginDragging:

· 滚动开始时执行
-(void)scrollViewDidScroll:

    //滑动视图的偏移量 contentOffset表示的就是scrollViewbounds的起始点坐标的变化,滑动视图之所以能够产生子视图的滑动就是通过不断修改其bounds的起始点来完成自身坐标系的偏移, 坐标系的偏移带动子视图的移动

· 滑动即将结束时执行
-(void)scrollViewWillEndDragging:
withVelocity:
targetContentOffset


· 开始减速时执行
-(void)scrollViewWillEndDecelerating:


· 减速结束时触发
-(void)scrollViewDidEndDecelerating


· 拖拽结束时执行
-(void)scrollViewDidEndDragging:
willDecelerate:

滑动到顶部时的执行
- ( BOOL ) scrollViewShouldScrollToTop: ( UIScrollView * ) scrollView
- ( void ) scrollViewDidScrollToTop: ( UIScrollView * ) scrollView
跟踪缩放交互

  • 视图开始缩放时执行
    - (void )scrollViewDidZoom:

    ScrollView缩放指定视图时, scrollview会根据缩放来实时修改contentSize的大小, 为了保证被缩放的视图一致处于中心位置, 可以通过实现协议 , 以如下x轴 y轴 增量补充的形式修改.
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {}

    · 通过协议让代理对象为ScrollView 指定要被缩放的对象(该视图应该是已经在ScrollView上存在的)
    - (View * )viewForZoomingInScrollView:


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);
   
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值