【发布时间】:2012-09-11 07:54:01
【问题描述】:
我正在开发一个简单的 PDF 阅读器,在底部我有一个带有所有页面的 UIScrollView,在中间我有一个标签,它应该在您滚动时显示页码。
但我无法弄清楚如何计算确切位置并查看中间的页面。 我也有两种类型的 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];
}
正如您从图片中看到的那样,页面并没有真正匹配(它们在第二张图片中意外匹配,但是当您进一步滚动时它们不会匹配) 有没有人有类似的经验?
【问题讨论】:
标签: iphone ios uiscrollview paging