Oc 滚动视图

本文详细介绍了UIScrollView的基本概念,包括其作为可滚动视图的角色,以及UITableView、UITextView、UICollectionView等子类。内容涉及contentSize、contentOffset、contentInset等重要属性,以及如何设置滚动条、回滚效果和分页。此外,还提到了解决全屏滚动视图中导航栏问题的技巧,并展示了设置滚动视图方向和代理方法的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、UIScrollView的概念

UIScrollView是一个能够滚动的试图控件,能够滑动的视图,都是继承于UIScrollView,而UIScrollView继承于UIView

UIScrollView的子类:UITableView、UITextView、UICollectionView

二、UIScrollView的概念

contentSize 能够让视图显示更多的内容,contSize就是UIScrollView实际内容大小.如果contentSize的尺寸比ScrollView小,或者相等,则ScrollView不能滑动

contentOffset平移量,能够直接定位到你想看的内容

contentInset 给ScrollView四周增加额外的滚动区域,内容的内边框

showsHorizontalScrollIndicator 是否设置水平滚动条

showsVerticalScrollIndicator 是否设置垂直滚动条

bounces 是否设置回滚效果

scrollEnabled 是否滚动

indicatorStyle 设置滚动条样式

pagingEnabled 设置滚动分页

maximumZoomScale图片最多能放大多少倍(要放大、缩小得挂上代理)

minimumZoomScale图片最多能缩小多少倍

decelerationRate减速速率

*设置不包含导航栏解决全屏滚动视图上面导航栏处无图片的问题,图片从导航栏一下开始定位计算,这个以后做项目总会有必要记得

self.edgesForExtendedLayout=UIRectEdgeNone;

设置滚动视图方向垂直

scrollView.direction=Vertical;

delegate 代理

三、UIScrollView的代理方法(放大、缩小、拖拽)

已经滚动时调用

- (void)scrollViewDidScroll:(UIScrollView*)scrollView;

已经缩放

- (void)scrollViewDidZoom:(UIScrollView *)scrollView;

开始拖拽

- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView;

将要拖拽结束获得降速的速率和偏移量

- (void)scrollViewWillEndDragging:(UIScrollView*)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inoutCGPoint *)targetContentOffset;

拖拽结束将要降速

- (void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;

开始降速

- (void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView

结束降速

- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView

滚动动画将要消失

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView*)scrollView

设置缩放视图

- (nullableUIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView

开始缩放

- (void)scrollViewWillBeginZooming:(UIScrollView*)scrollView withView:(nullableUIView*)view

结束缩放以及缩放的比例

- (void)scrollViewDidEndZooming:(UIScrollView*)scrollView withView:(nullableUIView*)view atScale:(CGFloat)scale;

是否可以滚动到顶部设置YES可以

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView

移动到顶部调用

- (void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;

下面一个demo来展示下

#import "ViewController.h"
@interface FirstLoginViewController ()<UIScrollViewDelegate>
{
    UIScrollView *theScroll;
    NSArray *arr;
    UIPageControl *thePage;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    theScroll = [[UIScrollView alloc]initWithFrame:self.view.frame];
    theScroll.delegate = self;
    [self.view addSubview:theScroll];

    theScroll.pagingEnabled = YES;
    arr = @[@"1.JPG",@"2.JPG",@"3.JPG"];
    theScroll.contentSize = CGSizeMake(self.view.frame.size.width*arr.count, self.view.frame.size.width);

    for (int i = 0; i<arr.count; i++)
    {
        UIImageView *theImg = [[UIImageView alloc]initWithFrame:CGRectMake(theScroll.frame.size.width * i, 0, self.view.frame.size.width, self.view.frame.size.height)];
        theImg.userInteractionEnabled = YES;

        theImg.image = [UIImage imageNamed:arr[i]];

        if (i == arr.count-1)
        {
            UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width-100)/2, 550, 100, 40)];
            [btn setTitle:@"立即体验" forState:UIControlStateNormal];
            [btn setBackgroundColor:[UIColor blackColor]];
            [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
            btn.layer.cornerRadius = 10;
            btn.layer.masksToBounds = YES;
            [theImg addSubview:btn];
        }

        [theScroll addSubview:theImg];
    }

    //创建页面控制器
    thePage = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width-100)/2, 600, 100, 30)];
    thePage.numberOfPages = arr.count;
    thePage.currentPage = 0;
    [self.view addSubview:thePage];


}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSInteger index = theScroll.contentOffset.x / theScroll.frame.size.width;
    thepage.currentPage = index;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值