iOS开发实战 - 实现scrollView和collectionView自定义分页

点击上方“iOS开发”,选择“置顶公众号”

关键时刻,第一时间送达!

640?640?wx_fmt=gif


系统自带的Paging Enabled会把scrollView/collectionView的contentSize平均分割成几部分,每页滑动的距离不能自己控制,如下面的演示图片,每页滑动的距离是 cell.width + space + 下一个cell的一小部分,这里将介绍如何自定义每页滑动的距离,并优雅的运用到自己的项目中


640?wx_fmt=gif

OC版 collectionView自定义分页


部分代码:


#define itemWidth self.width-20-34
#define itemHeight self.height-20

@implementation XXHomeBrandCell
{
    NSInteger selectedIndex;
}

- (void)awakeFromNib {
    [super awakeFromNib];
    [_collectionView registerNib:[UINib nibWithNibName:@"XXHomeBrandItem" bundle:nil] forCellWithReuseIdentifier:@"XXHomeBrandItem"];
    selectedIndex = 0;
}

//主要代码
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat x = targetContentOffset->x;
    CGFloat pageWidth = itemWidth + 20;
    CGFloat movedX = x - pageWidth * selectedIndex;
    if (movedX < -pageWidth * 0.5) {
        // Move left
        selectedIndex--;
    } else if (movedX > pageWidth * 0.5) {
        // Move right
        selectedIndex++;
    }

    if (ABS(velocity.x) >= 2){
        targetContentOffset->x = pageWidth * selectedIndex;
    } else {
        targetContentOffset->x = scrollView.contentOffset.x;
        [scrollView setContentOffset:CGPointMake(pageWidth * selectedIndex, scrollView.contentOffset.y) animated:YES];
    }
    NSLog(@"%ld",selectedIndex);
}

#pragma mark FlowLayoutDelegate
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(itemWidth, self.height-20);
}


640?wx_fmt=png

collectionView xib 1


640?wx_fmt=png

collectionView xib 2


640?wx_fmt=png

lowLayout


640?wx_fmt=png

item/cell


参考:

https://github.com/Silence-GitHub/PageScrollViewDemo/blob/master/PageScrollViewDemo/PageScrollVC.swift

里面包含scrollView和collectionView的自定义分页,不过都是swift版本


640.jpeg

  • 作者:Metro追光者

  • https://www.jianshu.com/p/1aa44dd17236

  • iOS开发整理发布,转载请联系作者获得授权

640?wx_fmt=gif640?【点击成为源码大神】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在cocos2dx-lua中,使用ScrollView加载大量项目可以通过以下步骤实现: 1. 创建一个ScrollView,并设置其大小和位置。 ```lua local scrollView = ccui.ScrollView:create() scrollView:setContentSize(cc.size(500, 500)) scrollView:setPosition(cc.p(0, 0)) ``` 2. 设置ScrollView的滚动方向和滚动条位置。 ```lua scrollView:setDirection(ccui.ScrollViewDir.vertical) scrollView:setScrollBarPositionFromCorner(cc.p(7, 7)) ``` 3. 创建一个容器,用于存储要加载的内容。 ```lua local container = ccui.Layout:create() container:setContentSize(cc.size(500, 10000)) scrollView:addChild(container) ``` 4. 定义一个函数,用于加载每一项内容到容器中。 ```lua local function loadItem(index) local item = ccui.Text:create() item:setString("Item " .. index) item:setPosition(cc.p(250, 10000 - index * 50)) container:addChild(item) end ``` 5. 在ScrollView的回调函数中,根据滚动位置动态加载内容。 ```lua local function scrollViewEvent(sender, eventType) if eventType == ccui.ScrollviewEventType.scrolling then local pos = scrollView:getInnerContainer():getPosition() local top = scrollView:getContentSize().height local bottom = top - scrollView:getInnerContainerSize().height if pos.y < bottom + 500 then for i = 1, 10 do loadItem(i) end end end end scrollView:addScrollViewEventListener(scrollViewEvent) ``` 这样,当用户滚动到ScrollView的底部时,会自动加载10个新的内容项到容器中。通过判断ScrollView的滚动位置,只有当滚动到接近底部时才会加载新的内容项,避免一次性加载大量的内容导致卡顿。可以根据实际需求调整每次加载的内容数量和内容项的布局样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值