iOS自定义scrollview的滑动停止位置

本文介绍如何在iOS中实现一个横向滚动视图的分页效果,特别是当每个item宽度小于屏幕时,利用`nearestTargetOffsetForOffset`和`scrollViewWillEndDragging`方法精确控制滑动停止位置。

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


本文代码主要用于实现横向滚动视图,每个item不满一屏的情况下的分页效果

  

- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset

{

   

    CGFloat pageSize = 300.f;

    CGFloat targetX;


    CGFloat currentCenterX = pageSize *_curPage;

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

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

        _curPage ++;//_curPage是记录没有滑动之前的页数

    }elseif(offset.x - currentCenterX < -10 && velocity.x <0){

        _curPage --;

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

        _curPage ++;

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

        _curPage --;

    }

    targetX = pageSize * _curPage;

    returnCGPointMake(targetX, offset.y);


}


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

{

   //velocity : 当手指轻扫 的时候会有一个初速度,正常拖动的时候初速度都是0

    CGPoint targetOffset = [selfnearestTargetOffsetForOffset:*targetContentOffset];

    targetContentOffset->x = targetOffset.x;

    targetContentOffset->y = targetOffset.y;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值