【UIScrollView】基本方法+基本描述

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];

scrollView.backgroundColor = [UIColor redColor];
   
    scrollView.scrollsToTop = NO;  // 是否支持滑动最顶端

    scrollView.delegate = self;      // 设置代理, 需要遵循协议

    scrollView.contentSize = CGSizeMake(320, 460*10); // 设置滚动内容大小
    //小技巧 : 如果不想某个左右滚动, width设为0. 同理上下就设定height为0
   
    scrollView.bounces = NO; // 控件滚动的时候遇到边框是否反弹
    
    scrollView.pagingEnabled = YES; // 控制控件是否整页翻动

    scrollView.scrollEnabled = NO;     // 控制控件是否能滚动

    scrollView.showsHorizontalScrollIndicator = NO;  // 控制是否显示水平方向的滚动条
    scrollView.showsVerticalScrollIndicator = NO; // 控制是否显示垂直方向的滚动条
    
    scrollView.indicatorStyle= UIScrollViewIndicatorStyleWhite; // 设定滚动条的样式 , 禁止滚动条了还设什么样式?
    
    scrollView.contentInset = UIEdgeInsetsMake(0, 50, 50, 0); // 设置内容的边缘的内边距

    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 50, 0, 0); // 指定滚动条在scrollerView中的位置
       
      scrollView - tracking   //如果用户已经触及的内容视图但可能还没有开始拖动它。这个属性的值便是YES

      scrollView - dragging       //一个布尔值,指示用户是否已经开始滚动内容。   
 
      scrollView - decelerating   //返回的内容是否在滚动视图后,用户解除他们的手指。 (只读)//如果用户不拖动内容但滚动事件仍发生 ,返回的值是YES。

      scrollView - delaysContentTouches     //一个布尔值,决定是否推迟滚动视图触摸手势的处理。   //如果这个属性的值是YES ,滚动视图延误处理的触摸式的姿态,直到它可以决定 ,是否滚动是意图。如果该值是NO,滚动视图立即调用touchesShouldBegin : withEvent:inContentView :默认值是YES

      scrollView - scrollsToTop     //一个布尔值,控制是否滚动到顶部的姿态是有效的
//当设为YES,发生这种姿态时滚动视图跳转到内容顶端,此属性的默认值是YES 。

   - (void)flashScrollIndicators   //当你把滚动视图移动到前面,你应该调用此方法。
    [scrollView flashScrollIndicators]; // 提示用户,正在滚动视图

    @property(nonatomic, getter=isDirectionalLockEnabled) BOOL directionalLockEnabled  //如果此属性是NO,则滚动允许在水平和垂直方向。若是YES,则只在使用者最开始滚动的方向上进行(水平或垂直),若开始滚动是沿对角线方向的则可任意方向滚动。默认值是NO , 水平了,就是水平, 垂直了就是垂直
    scrollView.directionalLockEnabled = YES;

    

    
____________________________________________________________________-




- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated      //此方法滚动查看内容,以便由rect定义的区域仅仅是滚动视图内是可见的。如果该地区已是可见的,该方法什么都不做。

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated // 设置从内容视图的原点偏移对应接收机的起源
contentOffset    //从内容视图的原点偏移的一个点
// animated     YES表示以一个恒定的速度过渡到新的偏移,NO表示立即到达

//一个浮点数指定当前的缩放比例
- (void)setZoomScale:(float)scale animated:(BOOL)animated  //新的值应该在是minimumZoomScale和maximumZoomScale之间

参数:
scale         //缩放内容的新的值。
animated    //YES推动过渡到新的规模, NO 以使立即过渡。



//自定义默认行为,当手指触摸在显示的内容由子类重写。
- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view  //UIScrollView的默认行为是调用触摸事件发生的UIResponder的事件处理方法的目标子视图  

参数:
touches     //一个涉及的UITouch实例集代表表示事件的开始阶段
event        //代表在触摸触摸对象属于事件的对象。
view          //在内容中发生触摸手势子视图。 

Return Value     //返回NO ,如果你不想滚动视图发送的事件消息查看。如果你想以接收这些消息,返回YES (默认) 。 


//返回是否取消有关的内容子视图的接触,并开始拖动。
- (BOOL)touchesShouldCancelInContentView:(UIView *)view  //它开始发送跟踪邮件的内容视图后动视图调用此方法。如果它从这种方法收到NO便停止拖动和转发触摸事件的内容子视图。滚动视图不调用此方法如果canCancelContentTouches 属性值是NO
参数:
view        在内容中被触发的视图对象
Return Value    //YES取消进一步触控消息查看,NO查看继续收到这些消息。如果视图认为是不是一个UIControl对象默认YES,否则返回NO
zoomToRect:animated:    //缩小到特定区域的内容,所以它是在接收器中可见。 

这里把UIScrollView的几个要点总结下:

从你的手指touch屏幕开始,scrollView开始一个timer,如果:

1.  150ms内如果你的手指没有任何动作,消息就会传给subView。

2.  150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView,这里就是产生问题二的原因。

3. 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。

观察下tableView的情况,你先按住一个cell,cell开始高亮,手不要放开,开始滑动,tableView开始滚动,高亮取消。

 

delaysContentTouches的作用:

这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。

 

cancelsTouches的作用:

这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。(UiScrollView 与 TableView重叠问题)

 

转载于:https://www.cnblogs.com/cwllong/p/5029367.html

你可能感兴趣的