iOS界面编程-UIScrollView

本文详细介绍了UIScrollView的基本用法,包括如何管理内容显示、滚动行为、滑动指示器等,并提供了实际的代码示例。

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

一、介绍

   UIScrollView继承自UIView,它为大于窗口大小的内容提供显示支持。用户可以通过滑动屏幕滚动其它内容还以通过手指捏放大缩小显示内容。UIScroll是一些UIKit的超类,包括UITableView及UITextView

二、相关方法和属性

1.管理内容的显示

a .设置contentView的相对于scrollView的偏移量,可以理解为scrollview当前显示区域顶点相对于frame顶点的偏移量。

  - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated

b、设置scrollView 内容视图大小,即可显示的区域。

@property(nonatomic) CGSize contentSize

c、@property(nonatomic) UIEdgeInsets contentInset

contentInset 是scrollview中contentView.frame.origin与scrollview.frame.origin的关系,比如contentView的frame为(0,30,320,480),那么contentInset则为(0, 30),

2.管理滚动

a、@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled 可设置是否可以滚动,默认为yes

b. @property ( nonatomic , getter = isDirectionalLockEnabled ) BOOL directionalLockEnabled ,设置为YES滚动某个方向时,另一个方向不能滚动。默认为NO,两个方向都可以同时滚动

c、@property(nonatomic) BOOL scrollsToTop 布尔值判断滑动到顶点的手势是否可用。

d.- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated指定坐标空间可见

e。@property(nonatomic, getter=isPagingEnabled) BOOL pagingEnabled 默认NO,当设置为YES时,可用

f、@property(nonatomic) BOOL bounces,设置是否有反弹效果,默认为YES

g、@property(nonatomic) BOOL alwaysBounceVertical 设置即使内容小于scrollveiw ,水平方向总是有反弹效果,默认是NO

h、@property(nonatomic) BOOL alwaysBounceHorizontal设置即使内容小于scrollveiw ,垂直方向总是有反弹效果,默认是NO
 

可以由子类继承,当在显示内容按下手指时,定制默认的行为。

- (BOOL)touchesShouldBegin:(NSSet<UITouch *> * nonnull)touches withEvent:(UIEvent * nullable)event inContentView:(UIView * nonnull)view

- (BOOL)touchesShouldCancelInContentView:(UIView * nonnull)view

@property(nonatomic) BOOL canCancelContentTouches

@property(nonatomic) BOOL delaysContentTouches

@property(nonatomic) CGFloat decelerationRate

@property(nonatomic, readonly, getter=isDragging) BOOL dragging

@property(nonatomic, readonly, getter=isTracking) BOOL tracking 判断用户已经按下还没有开始拖

@property(nonatomic, readonly, getter=isDecelerating) BOOL decelerating 判断用户是否拖拽结束,但滚动还没有结束


3、管理滑动指示器

a指示器类型@property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle有三种类型

b指示器@property(nonatomic) UIEdgeInsets scrollIndicatorInsets

c@property(nonatomic) BOOL showsHorizontalScrollIndicator 是否显示水平指示器,默认YES

d@property(nonatomic) BOOL showsVerticalScrollIndicator 是否显示垂直指示器,默认NO

e- (void)flashScrollIndicators

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer

@property(nonatomic, readonly) UIPinchGestureRecognizer *pinchGestureRecognizer

- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated

@property(nonatomic) CGFloat zoomScale

- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated

@property(nonatomic) CGFloat maximumZoomScale

@property(nonatomic) CGFloat minimumZoomScale

4、管理委托

@property(nonatomic, weak) id< UIScrollViewDelegate > delegate

5、管理键盘

表明拖拽过程中,键盘消失的模式@property(nonatomicUIScrollViewKeyboardDismissMode keyboardDismissMode

三实际例子

    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(50, 80, 150, 300)];
    scrollView.backgroundColor = [UIColor grayColor];
    [scrollView setContentOffset:CGPointMake(14, 14) animated:YES];
    
    scrollView.contentSize=CGSizeMake(600, 500);
    
    UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,  150, 500)];
    contentView.backgroundColor = [UIColor greenColor];
    
    [scrollView setContentOffset:CGPointMake(30, 0) animated:YES];
    
    [scrollView setContentInset:UIEdgeInsetsMake(10, 10, 0, 0)];
//    scrollView.scrollEnabled = NO;
//    scrollView.directionalLockEnabled = YES;
    
    [scrollView scrollRectToVisible:CGRectMake(300, 100, 50, 50) animated:YES];
    [scrollView addSubview:contentView];
//    scrollView.bounces= NO;
    [self.view addSubview:scrollView]

  _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 64, scrollViewWidth, scrollViewHeight)];
    _scrollView.backgroundColor = [UIColor redColor];
    [self.view addSubview:_scrollView];
    _scrollView.contentSize = CGSizeMake(scrollViewWidth * 5, scrollViewHeight);
    _scrollView.pagingEnabled = YES;
    _scrollView.maximumZoomScale = 3;
    _scrollView.minimumZoomScale = 0.5;
    _scrollView.delegate = self;
    
    _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, scrollViewWidth * 5, scrollViewHeight)];
    _contentView.backgroundColor = [UIColor greenColor];
    [_scrollView addSubview:_contentView];

    for (int i = 0; i < 5; i++) {
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(i * scrollViewWidth , 0, scrollViewWidth, scrollViewHeight)];
        if (i % 2 ==0) {
            view.backgroundColor = [UIColor blackColor];
        }else {
            view.backgroundColor = [UIColor whiteColor];
        }
        [_contentView addSubview:view];
        
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, scrollViewWidth, scrollViewHeight)];
        imageView.backgroundColor = [UIColor clearColor];
        NSString *imageName = [NSString stringWithFormat:@"bg%i.png", i+1];
        imageView.image = [UIImage imageNamed:imageName];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        [view addSubview:imageView];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

house.zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值