scrollview自定义分页大小

该博客详细介绍了如何在ScrollView中实现自定义分页效果。通过`nearestTargetOffsetForOffset`方法,根据滑动偏移量和速度计算目标位置,确保在滑动过程中平滑切换页面。`_getCurrentCenterXWithPageSize`方法用于获取当前页面中心点的X坐标,确保内容居中显示。

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

- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset withVelocity:(CGPoint)velocity

{

    //滑动视图在最左侧的时候再往最左侧滑或者在最右侧的时候再往最右侧滑的时候就不用计算了

    if (self.adCollectionView.contentOffset.x < 0 || self.adCollectionView.contentOffset.x + self.adCollectionView.width > self.adCollectionView.contentSize.width) {

        return offset;

    }


    CGFloat pageSize = self.cellWidth + self.padding;

    CGFloat targetX;

    CGFloat currentCenterX = [self _getCurrentCenterXWithPageSize:pageSize];

    //10pt的设置是为了让滑动视图只要有一点滑动动作,就让他滚到下一个页面,使用系统自己的滚动判定在手动滑动的距离较短时会导致视图抖动

    //带速度的时候(也就是轻扫)才让他滑到下一页

    if (offset.x - currentCenterX >= 10.f && velocity.x > 0) {

        _curPage++;

    } else if (offset.x - currentCenterX < -10.f && velocity.x < 0) {

        _curPage--;

    } else if (offset.x - currentCenterX >= pageSize / 2.f && velocity.x == 0) {

        _curPage++;

    } else if (offset.x - currentCenterX < -pageSize / 2.f && velocity.x == 0) {

        _curPage--;

    }

    targetX = [self _getCurrentCenterXWithPageSize:pageSize];


    [self.pageControl setCurIndex:_curPage];


    return CGPointMake(targetX, offset.y);

}


- (CGFloat)_getCurrentCenterXWithPageSize:(CGFloat)pageSize

{

    return pageSize * _curPage - ((self.adCollectionView.width - self.cellWidth) / 2.f); //实际上每次滑动的分页的大小并不一定是item的大小,为了使停止的时候item居中,需要减掉多余部分的x,16是左边的inset(说白了就是滑的多了,要减掉补偿一下)

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值