我正在开发一个简单的 PDF 阅读器,在底部我有一个UIScrollView
所有页面,在中间我有一个标签,它应该在你滚动时显示页码。
但我无法弄清楚如何计算确切位置并查看中间的页面。我也有 2 种类型的 PDF,一种是双页 PDF,另一种只是单面。
这就是我在滚动视图中绘制它们的方式
NSInteger xPos = 20;
for(int i = 0; i < [pdf numberOfPages]; i++)
{
ThumbViewController *tmpThumb = [[ThumbViewController alloc] initWithNibName:nil bundle:nil page:[NSString stringWithFormat:@"%i", i + 1] andPDF:pdf];
// SINGLE SIDE PDF
if([_issue.presentation isEqualToString:@"1"])
{
tmpThumb.view.frame = CGRectMake(xPos, 5, 150, 200);
xPos += 200;
}
// DOUBLE SIDE PDF
else
{
tmpThumb.view.frame = CGRectMake(xPos, 5, 150, 200);
// Draw double pages
if((i % 2) == 1)
{
xPos += 105;
}
else
{
xPos += 140;
}
}
[_scrollView addSubview:tmpThumb.view];
[tmpThumb release];
}
这给了我这些漂亮的缩略图:
但是我被困在下一部分,当通过滚动时UIScrollView
我找不到任何关于如何计算哪个页面位于视图中间的好方法,目前我尝试了这个:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// Calculate what page is in the middle
NSInteger contentSize = scrollView.contentSize.width / [_readerModel.pdf numberOfPages];
NSInteger pageNumber = floor(scrollView.contentOffset.x / contentSize);
// Single side
if([_issue.presentation isEqualToString:@"1"]) pageNumber = floor(scrollView.contentOffset.x / contentSize);
NSLog(@"%d / %d", contentSize, pageNumber);
_thumbnailPopup.titleLabel.text = [_readerModel getTitleForPage:pageNumber inIssue:_readerModel.currentIssue];
_thumbnailPopup.pageLabel.text = [NSString stringWithFormat:@"%d", pageNumber];
}
正如您从图片中看到的那样,页面并没有真正匹配(它们在第二张图片中意外匹配,但是当您进一步滚动时它们不会匹配)有没有人有这样的经验?