UICollectionView:用于分页的屏幕外自动滚动

时间:2017-08-14 11:23:50

标签: ios objective-c uicollectionview

我正在尝试通过以下代码在我的应用中滚动屏幕UICollectionView

int pages = ceil(aCollectionView.contentSize.height / aCollectionView.frame.size.height);

for (int i = 0; i < pages; i ++)
{
     NSArray *sortedVisibleItems = [[aCollectionView indexPathsForVisibleItems] sortedArrayUsingSelector:@selector(compare:)];

     NSIndexPath *lastItem = [sortedVisibleItems lastObject];

     // 2.next position
     NSInteger nextItem = lastItem.item + 1;
     NSInteger nextSection = lastItem.section;
     NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:nextSection];

     [self takeImage];

     dispatch_async(dispatch_get_main_queue(), ^
    {            
        [aCollectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
    });
}

并拍摄每页的屏幕截图以进行打印。 但它不滚动并且总是多次打印第一页。

UICollectionView的属性

enter image description here

我错过了或做错了方向吗?

3 个答案:

答案 0 :(得分:0)

您总是通过NSIndexPath *lastItem = [sortedVisibleItems lastObject]获取最后一个对象;拍摄照片。这将始终捕获相同的页面。

这是因为您没有从数组中删除lastObject。

使用

删除lastObject
[sortedVisibleItems removeLastObject];

答案 1 :(得分:0)

int pages = ceil(aCollectionView.contentSize.height / aCollectionView.frame.size.height);
NSArray *visibleItems = [aCollectionView indexPathsForVisibleItems];
NSInteger row = 0;
NSIndexPath *currentItem;
for (NSIndexPath *indexPath in visibleItems) {
    if (row < indexPath.row){
        row = indexPath.row;
        currentItem = indexPath;
    }
}
NSLog(@"current indexpath ; %ld",(long)currentItem.row);
if (currentItem.row == pages-1) {
    return;
}
NSIndexPath *nextItem = [NSIndexPath indexPathForItem:currentItem.item + 1 inSection:currentItem.section];
[aCollectionView scrollToItemAtIndexPath:nextItem atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];

试试这个

答案 2 :(得分:0)

集合视图仅在主线程上更新。你的代码被包装在一个循环中,它永远不允许主线程运行和更新。

有很多关于这方面的讨论。许多人直接与UIScrollView做同样的事情,但这是同一个问题。

您可能希望看一下......不确定它是否符合您的需求,但我已多次看到它被引用:https://github.com/sgr-ksmt/PDFGenerator

如果这对您不起作用,它可能具有您需要的技术,因此对该代码进行一些调查就可以找到答案。