テキスト (つまり、UILabel) といくつかの黒い線だけを持つ単純な UIView があるとします。
これがまさにそのUIViewを印刷する方法です...
それをUIImageとしてレンダリングし、それを印刷します...
- (IBAction)printB:(id)sender
{
// we want to print a normal view ... some UILabels, maybe a black line
// in this technique, depressingly we CREATE AN IMAGE of the view...
// step 1. make a UIImage, of the whole view.
UIGraphicsBeginImageContextWithOptions(self.printMe.bounds.size, NO, 0.0);
// [self.printMe.layer renderInContext:UIGraphicsGetCurrentContext()];
// UIImage *asAnImage = UIGraphicsGetImageFromCurrentImageContext();
// .... or, more futuristically.....
[self.printMe drawViewHierarchyInRect:self.printMe.bounds
afterScreenUpdates:NO];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// step 2. choose grayscale, etc
UIPrintInfo *info = [UIPrintInfo printInfo];
info.orientation = UIPrintInfoOrientationPortrait;
info.outputType = UIPrintInfoOutputGrayscale;
// step 3, print that UIImage
UIPrintInteractionController *pic =
[UIPrintInteractionController sharedPrintController];
pic.delegate = self;
//pic.printingItem = asAnImage;
pic.printingItem = snapshotImage;
pic.printInfo = info;
UIPrintInteractionCompletionHandler completionHandler =
^(UIPrintInteractionController *pic, BOOL completed, NSError *error)
{
if (error)
NSLog(@"failed... %@ %ld", error.domain, (long)error.code);
if (completed)
NSLog(@"completed yes");
else
NSLog(@"completed no");
};
[pic presentAnimated:YES completionHandler:completionHandler];
}
しかし、これはあなたにがらくたの結果をもたらします。タイポグラフィを印刷するのはばかげた方法です。それはポストスクリプトか何かとして送られているはずです。
iPadの画面で...
印刷すると..
もちろん、Retina iPad を使用すれば多少は良くなりますが、それは問題ではありません。テキスト情報、黒い線をイメージとして印刷するのはばかげています。
さて、あなたはこのような UIView を印刷できると思うでしょう...
pic.printFormatter = [someUIView viewPrintFormatter];
しかし、私が何をしようとしても、それを機能させることはできません。
誰もこれについて何か持っていますか?ありがとう!
PS - iOS では、最近、renderInContext の使用からスナップショット呼び出しの使用に変更したことに注意してください。ここでの問題にはまったく違いはありません、乾杯。