代码改变世界

UIScrollView

2015-06-05 22:09  Say_ALin  阅读(350)  评论(0编辑  收藏  举报

UIScrollView

UIScrollView重中之重

  • 一定要设置contentSize属性,ScrollView才能进行视图的滚动
// 设置contentsize
self.scrollView.contentSize = CGSizeMake(size);

如果用storyboard创建UIScrollView时,UIScrollView会自动创建两个子控件

  • HorizontalScrollIndicator 横向滑动条
  • VerticalScrollIndicator 竖向滑动条
NSLog(@"%@", self.scrollView.subviews);
打印结果:
(
    "<UIImageView: 0x7fc02bd2e140; frame = (297.5 293; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7fc02bd2dda0>>",
    "<UIImageView: 0x7fc02bd2c6d0; frame = (293 297.5; 7 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7fc02bd29290>>",
)

  • 如果设置了其显示为NO,那么UIScrollView的子控件数组中就不会有这两个子控件的
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
  • 用代码创建的UIScrollView,不会有这个两个子控件,但是显示的时候会有的

contentOffset

  • contentOffset:位移。
  • 表示 内容的左上角与ScrollView的左上角的X.Y的差值
// x向右位移100, y向下位移100
self.scrollView.contentOffset = CGPointMake(100, -100);

contentIntset

  • 类似于Android的padding
  • 移动后,内容将不能弹回原点(ScrollView的0,0,0,0),给ScrollView更大的滑动区域
// 表示上下左右各有20的padding值
self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);

scrollView的代理UIScrollViewDelegate

  • 首先要设置代理
  • 代理方法
// 设置代理,但是self必须遵循协议UIScrollViewDelegate
self.scrollView.delegate = self;

// 代理方法
// 正在滑动
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
// 正在滑动缩放
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2);
// 即将开始拖拽
- (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;

// 缩放,返回需要缩放的视图,需要配合下面两个方法使用
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
self.scrollView.minimumZoomScale = 0.2;
self.scrollView.maximumZoomScale = 1.0;


// 即将开始缩放
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2);
// 即将结束缩放
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale;

// 是否可以滑动到顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
// 已经滑动到顶部
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;

弹簧效果

// 关闭弹簧效果
self.scrollView.bounces = NO;

当scrollView为单页时,不显示UIPageControl控件

// 方式一:直接设置pageCotrol的属性
self.pageCotrol.hidesForSinglePage = YES;
// 方式二:根据当前的scrollView的子控件数量来设置pageCotrol的hidden
self.pageCotrol.hidden = self.scrollView.subviews.count <= 1;