PDFページの回転と
iOSでの表示結果
Cocoa Study #45
May 28, 2011
Masayuki Nii
2011年5月27日金曜日

1
Agenda

iOSのPDF表示のための仕組み
回転の認識について

2011年5月27日金曜日

2
CoreGraphicsによるPDF表示
UIViewを継承したクラスのdrawRect:メソッドに以下
のようなPDFページの描画を行えばよい
CGPDFDocumentRef document
= CGPDFDocumentCreateWi...
座標変換(アフィン変換)

CGContextConcatCTM ( context,
CGPDFPageGetDrawingTransform (
pageRef, kCGPDFMediaBox, pageRect, 0, true ));
...
表示結果

2011年5月27日金曜日

5
ページ回転情報の解釈
つまり、90度、270度は上下逆さま

•

2011年5月27日金曜日

PDFに設定された角度で最終的に回転を自動的に行うと考えられる

6
座標変換と回転角度

Y軸が上下逆さまなので、実際には角度は負の数と解釈
される

•
•
•

90度→ -90度 = 270度
270度→ - 270度 = 90度
180度→ -180度 = 180度

どうすればいいか?

•
•
•
...
90/270度の場合の追加変換

if ( angle == 90 || angle == 270 ) {
CGContextConcatCTM( context,
CGAffineTransformMakeRotation(M_PI) );
...
まとめ

アフィン変換を知らないとCore Graphicsは使いこなせ
ない
iOSのPDF表示機能はもうちょっとなんとかならないの
かいな?

2011年5月27日金曜日

9
Upcoming SlideShare
Loading in …5
×

Cocoa勉強会#45-PDFページの回転とiOSでの表示結果

810 views

Published on

Cocoa勉強会#45
2011/5/28
PDFページの回転とiOSでの表示結果
新居雅行

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
810
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cocoa勉強会#45-PDFページの回転とiOSでの表示結果

  1. 1. PDFページの回転と iOSでの表示結果 Cocoa Study #45 May 28, 2011 Masayuki Nii 2011年5月27日金曜日 1
  2. 2. Agenda iOSのPDF表示のための仕組み 回転の認識について 2011年5月27日金曜日 2
  3. 3. CoreGraphicsによるPDF表示 UIViewを継承したクラスのdrawRect:メソッドに以下 のようなPDFページの描画を行えばよい CGPDFDocumentRef document = CGPDFDocumentCreateWithURL ( (CFURLRef)sampleURL ); CGPDFPageRef pageRef = CGPDFDocumentGetPage ( document, self.page ); CGRect pageRect = CGPDFPageGetBoxRect( pageRef, kCGPDFMediaBox ); NSInteger angle = CGPDFPageGetRotationAngle( pageRef ); : : CGContextDrawPDFPage ( context, pageRef ); 2011年5月27日金曜日 3
  4. 4. 座標変換(アフィン変換) CGContextConcatCTM ( context, CGPDFPageGetDrawingTransform ( pageRef, kCGPDFMediaBox, pageRect, 0, true )); CGContextConcatCTM ( context, CGAffineTransformMakeTranslation( 0, pageRect.size.height) ); CGContextConcatCTM ( context, CGAffineTransformMakeScale( 1.0, -1.0 ) ); 2011年5月27日金曜日 4
  5. 5. 表示結果 2011年5月27日金曜日 5
  6. 6. ページ回転情報の解釈 つまり、90度、270度は上下逆さま • 2011年5月27日金曜日 PDFに設定された角度で最終的に回転を自動的に行うと考えられる 6
  7. 7. 座標変換と回転角度 Y軸が上下逆さまなので、実際には角度は負の数と解釈 される • • • 90度→ -90度 = 270度 270度→ - 270度 = 90度 180度→ -180度 = 180度 どうすればいいか? • • • • 2011年5月27日金曜日 あらかじめ、180度回転させればいいのでは! 90度→ 180 - 90 = 90 270度→ 180 -270 = -90 180度→ 180 -180 = 0 :この場合はそのままがいいと思われる 7
  8. 8. 90/270度の場合の追加変換 if ( angle == 90 || angle == 270 ) { CGContextConcatCTM( context, CGAffineTransformMakeRotation(M_PI) ); CGContextConcatCTM( context, CGAffineTransformMakeTranslation( -pageRect.size.width, -pageRect.size.height) ); } 2011年5月27日金曜日 8
  9. 9. まとめ アフィン変換を知らないとCore Graphicsは使いこなせ ない iOSのPDF表示機能はもうちょっとなんとかならないの かいな? 2011年5月27日金曜日 9

×