我正在尝试通过以下代码在我的应用中滚动屏幕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的属性
我错过了或做错了方向吗?
答案 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
如果这对您不起作用,它可能具有您需要的技术,因此对该代码进行一些调查就可以找到答案。