2012年3月14日水曜日

UIWebViewでPDF指定ページへスクロール


  //NSURLからPDFDocumentを作成
  NSURL *pdfURL;

  //ARC環境ではキャストに"__bridge"を付加する。
  CGPDFDocument pdf = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);

  //1ページ目のPageオブジェクトの取得
  CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);

  //ページサイズ取得
  CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
  float pageHeight = pageRect.size.height;
  float pageWidth = pageRect.size.width;

  //PDFの横幅をディスプレイの横幅に納める倍率
  float fitScale = self.frame.size.width / pageRect.size.width;

  //ページ数の取得
  int numberOfPages= CGPDFDocumentGetNumberOfPages(pdf);

  //UIWebViewをPDFの指定ページへスクロール
  UIWebView *webView = someUIWebView;
  UIScrollView *scrollView = webView.scrollView;

  float x = scrollView.contentOffset.x;
  float y = scrollView.contentSize.height/numberOfPages*pageNumber;
  CGPoint point = CGPointMake(x, y);
  [scrollView setContentOffset:point animated:YES];

参照:ZoomingPDFViewer

基本的には上記の方法でスクロールできるのですが、UIWebViewのPDFロードが非同期で行われるため、ロード直後(UIWebViewのデリゲートメソッドのwebViewDidFinishLoad:)ではスクロールビューのcontentSizeがまだ初期値のままの場合があります。

もし表示直後に特定ページにスクロールしたいような場合は注意が必要です。
参照:UIWebViewの初期ズーム倍率設定

0 件のコメント: