大雑把に次の2つの手順となる。
1.UIPrintInteractionControllerを起動する。
2.UIPrintPageRenderer のサブクラスで印刷処理をする。
【1.について】
イベント発生時(通常はメニュー選択)に呼び出される関数を作成する。
- (IBAction)printPage:(id)sender
{
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(!completed && error){
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
}
};
// UIPrintInfo の作成
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = [NSString stringWithFormat: @"job title"];
printInfo.duplex = UIPrintInfoDuplexLongEdge;// 両面印刷
printInfo.orientation = m2pView.frame.size.width < m2pView.frame.size.height ?
UIPrintInfoOrientationPortrait : UIPrintInfoOrientationLandscape;// 用紙方向を画面の方向と同じする
controller.printInfo = printInfo;
controller.showsPageRange = YES;// 複数ページ
// UIPrintPageRendererのサブクラスを作成
MyPrintPageRenderer *myRenderer = [[MyPrintPageRenderer alloc] init];
myRenderer.jobTitle = printInfo.jobName;
myRenderer.m2pView = m2pView;//描画用のコントロールを渡しておく
controller.delegate = myRenderer;//印刷時のdelegate関数はMyPrintPageRendererに記述
// ビューフォーマッターとやらの定義も必要らしい
UIViewPrintFormatter *viewFormatter;
viewFormatter = [self.m2pView viewPrintFormatter];
[myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
controller.printPageRenderer = myRenderer;
[myRenderer release];
// 印刷ダイアログ表示(印刷ボタンを押せばMyPrintPageRendererのdelegate関数が呼ばれる)
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromBarButtonItem:bbiPrint animated:YES completionHandler:completionHandler]; // iPad
else
[controller presentAnimated:YES completionHandler:completionHandler]; // iPhone
}
【2.について】
Appleが提供するサンプルコードのMyPrintPageRenderer.mがほぼ流用できる。
印刷領域は、ヘッダー・コンテンツ・フッターの上中下3分割となっている。
以下をページ単位に描画すればOK.
- (void)drawHeaderForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)headerRect;
- (void)drawContentForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)contentRect;
- (void)drawFooterForPageAtIndex:(NSInteger)pageIndex inRect:(CGRect)footerRect;
2011年3月17日木曜日
2011年3月6日日曜日
人月という単位はそれを理解出来ない人に対して使われる
一人で一ヶ月かかる作業は10人ですれば3日でできる。
ベテラン1人月と素人1人月は同じ作業量である。
論理的に反論出来ない人を押さえ付けるには便利な言葉である。
(追記)
プログラマーの場合、1人月の個人差が大きく、給与の比では収まらない。
数学の試験で直ぐに解答してしまう人もいれば、
一生かかっても解けない人がいるのと同じである。
ベテラン1人月と素人1人月は同じ作業量である。
論理的に反論出来ない人を押さえ付けるには便利な言葉である。
(追記)
プログラマーの場合、1人月の個人差が大きく、給与の比では収まらない。
数学の試験で直ぐに解答してしまう人もいれば、
一生かかっても解けない人がいるのと同じである。
登録:
投稿 (Atom)