UIScrollView

UIScrollView

A view that allows the scrolling and zooming of its contained views.

UIScrollView是一个允许滚动和缩放其内容的视图。

概述

UIScrollView是UIKit类中多个类的父类,例如UITableView,UICollectView和UITextView。

UIScrollView对象的中心概念是,一个视图它的原点可在内容视图上调整。它将内容剪切到其frame上,frame通常(但不一定)与应用程序主窗口的内容一致。滚动视图可跟踪手指的运动并相应地调整原点,进而调整frame上的内容展示。滚动视图本身不显示任何图形,只显示垂直和水平滚动指示符。滚动视图必须知道内容视图的大小,以便知道何时停止滚动。默认情况下,当滚动超出内容范围时,它将“弹回”。

管理滚动视图中显示的内容绘图的对象应平铺内容的子视图,以使任何视图都不会超出屏幕的大小。当用户在滚动视图中滚动时,此对象应根据需要添加和删除子视图。

以上是官方文档的介绍,相信大家与我一样打开文档后看完介绍一脸懵逼什么都没学会。下面用通俗的话来讲一讲UIScrollView,以objective-c的api作为参考。

介绍

移动设备的屏幕⼤小是极其有限的,直接展现在用户界面的内容就受限,所以需要滑动和缩放等操作来扩展可视区域,而UIScrollView(滚动视图)是一个在日常开发中使用频率极高的容器视图控件, 它允许用户通过滚动和缩放的方式查看超出屏幕区域大小的内容, 在应用程序开发中经常使用到的UITableView(列表视图)、UICollectionView(集合视图)和UITextView(文本视图)都是它的子类。而UIScrollView本身并不显示任何图形效果,通过addSubView来展示subView。

属性

frame

这里指的是UIScrollView的frame属性,通常是整个屏幕的大小。也代表了UIScrollView的子视图最大展示位置

contensize

@property(nonatomic)CGSize contentSize; // default CGSizeZero

默认值为CGSizeZero,通过该属性设置UIScrollView的滚动区域,当contenSize属性大于frame.size时才能进行横竖方向上的滚动。

contentOffset

@property(nonatomic) CGPoint contentOffset;// default CGPointZero

该属性表示UIScrollView的内容视图在contentSize的偏移量,以contenSize区域的左上角与UIScrollView的左上角作计算。往往在实现代理方法中使用该属性来监控滚动的进度。

pagingEnabled

@property(nonatomic,getter=isPagingEnabled) BOOL          pagingEnabled API_UNAVAILABLE(tvos);// default NO. if YES, stop on multiples of view bounds

是否分页属性,默认值为NO。YES则会在滚动时停止在多视图的边界。

代理方法

在这里插入图片描述

分页滚动图

这里实现了一个简单的横向图片滚动。通过在scrollview中添加imagview实现,代理方法只是实现了简单的NSLog信息的打印,并没有实现更高阶的逻辑或者动画效果,读者可以自行创作。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 100, self.view.bounds.size.width, self.view.bounds.size.height - 200)];
    scrollView.contentSize = CGSizeMake(self.view.bounds.size
                                        .width * 4, self.view.bounds.size.height - 200);
    scrollView.delegate = self;
    scrollView.pagingEnabled = YES;
    
    NSArray *imageNameArray = @[@"1", @"2", @"3", @"4"];
    
    for (int i = 0; i < 4; ++i)
    {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(scrollView.frame.size.width * i, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
        imageView.image = [UIImage imageNamed: [imageNameArray objectAtIndex:i]];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        [scrollView addSubview:imageView];
    }
    
    [self.view addSubview:scrollView];
}


//  any offset changes
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"scrollViewDidScroll - %@", @(scrollView.contentOffset.x));
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    NSLog(@"BeginDragging");
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"EndDragging");
}

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    NSLog(@"开始加速");
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"停止加速");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值