私は単純な PDF リーダーに取り組んでいます。一番下にはUIScrollView
すべてのページがあり、真ん中にはスクロール中にページ番号を表示するラベルがあります。
しかし、正確な位置を計算して、どのページが真ん中にあるかを確認する方法がわかりません。また、2 種類の PDF があります。1 つは見開きページの PDF で、もう 1 つは片面だけです。
これは、スクロールビューでそれらを描画する方法です
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 番目の写真では偶然一致していますが、さらにスクロールすると一致しません)。