我正在研究一个简单的PDF阅读器,底部我有一个UIScrollView
所有的页面,中间有一个标签,它应该在滚动时显示页码。计算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];
}
正如你从图片中看到的那样,页面并不真正匹配(他们意外地在第2张图片中做了,但是当你进一步滚动时,他们没有)有没有人有过类似的经验?
这意味着每次我滚动时,我都必须对所有缩略图做一次触击测试吗? –
不,你确实在一行代码的scrollview的中心点进行测试。但是缩略图之间的空格必须是它们的一部分,否则当分隔空间居中时,您将无法获得缩略图。 –
是的,但是我不必为每个缩略图匹配那个点吗? –