UIScrollView
博客专区 > 海锋 的博客 > 博客详情
UIScrollView
海锋 发表于7个月前
UIScrollView
  • 发表于 7个月前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

UIScrollView三个重要的属性

@property(nonatomic)         CGPoint                      contentOffset;                  // default CGPointZero
@property(nonatomic)         CGSize                       contentSize;                    // default CGSizeZero
@property(nonatomic)         UIEdgeInsets                 contentInset;    

三者关系如下图: 输入图片说明

常用的属性

设置scrollView是否有弹簧效果
self.scrollView.bounces = NO;
不管有没有设置contentSize,总是有弹簧效果
self.scrollView.alwaysBounceHorizontal = YES;
self.scrollView.alwaysBounceVertical = YES;
设置是否有滚动条
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;

注意: 千万不要通过索引去scrollView的subviews数组中访问子控件,因为默认UIScrollView的内部有两个滚动条(UIImageView控件);只有当设置水平跟垂直方向上滚动条hidden为YES,才可以。

  • 设置偏移量 动画的方式
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;

UIScrollViewDelegate调用

  • 匀速滑动
// scrollView将要开始滚动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
// scrollView在滚动的时候调用 该方法多次调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView   
// scrollView将要结束拖拽
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
// scrollView结束拖拽
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  • 变速滑动
// scrollView将要开始滚动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
// scrollView在滚动的时候调用 该方法多次调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView   
// scrollView将要结束拖拽
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
// scrollView结束拖拽
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
// scrollView开始减速 
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)UIScrollView
// scrollView在滚动的时候调用 该方法多次调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
// scrollView结束减速 (scrollView停止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

以上是用户滚动UIScrollView是的代理的回调;总结如下:

当用户匀速滑动的时候,调用WillBeginDragging方法,在滑动的过程中多次调用DidScroll:方法,当用户手指停止滑动的时候调用scrollViewWillEndDragging:然后在调用scrollViewDidEndDecelerating:

用户变速滑动的时候,WillBeginDragging->scrollViewDidScroll:(多次调用)->scrollViewWillEndDragging:withVelocity:targetContentOffset:->scrollViewDidEndDragging:willDecelerate:->scrollViewWillBeginDecelerating:->scrollViewDidScroll:(多次调用)->scrollViewDidEndDecelerating:->

  • 在开发中通过setContentOffset: animated:; 方法设置偏移量的代理回调
// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

但参数animation为YES是会调用代理方法。执行setContentOffset: animated:方法开始设置偏移量从开始到结束。调用代理方法的过程。

输入图片说明

  • 实现缩放的步骤

1.设置最大跟最小的缩放比例

self.scrollView.minimumZoomScale = 0.1;
self.scrollView.maximumZoomScale = 5.0;

2.在代理方法中返回需要缩放的视图

// 返回要缩放的视图
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView     // return a view that will be scaled. if delegate returns nil, nothing happens
{
    return self.imageView;
}
  • 设置分页
// 设置contentSize
    self.scrollView.contentSize = CGSizeMake(count * scrollViewW, 0);
// 开启分页功能
    self.scrollView.pagingEnabled = YES;

UIPageControl

// 总页数
@property(nonatomic) NSInteger numberOfPages; 
// 当前页数
@property(nonatomic) NSInteger currentPage;   
// pageControl单页的时候是否需要隐藏
@property(nonatomic) BOOL hidesForSinglePage; 
// 当前页
@property(nonatomic) NSInteger currentPage; 
// 普通颜色
@property(nullable, nonatomic,strong) UIColor *pageIndicatorTintColor;
// 当前页显示的颜色
@property(nullable, nonatomic,strong) UIColor *currentPageIndicatorTintColor;
// 设置pageControl显示的图片 貌似在新的XCode不可以这么访问了 程序会奔溃
[self.pageControl setValue:[UIImage imageNamed:@"current"] forKey:@"_currentPageImage"];
[self.pageControl setValue:[UIImage imageNamed:@"other"] forKey:@"_pageImage"];
共有 人打赏支持
粉丝 2
博文 21
码字总数 25279
×
海锋
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: