Напечатайте UIView, но НЕ путем рендеринга как растровое изображение

Скажем, у вас есть простой UIView только с текстом (например, UILabel) и, возможно, с некоторыми черными линиями.

введите описание изображения здесь

Вот как именно вы можете напечатать этот 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...

введите описание изображения здесь

когда напечатано..

введите описание изображения здесь

Обратите внимание, что, конечно, если вы используете Ipad Retina, это немного лучше, но это не главное. смешно печатать текстовую информацию, черные линии, как изображение.

Теперь, вы могли бы подумать, что вы можете напечатать UIView что-то вроде этого...

pic.printFormatter = [someUIView viewPrintFormatter];

но я не могу заставить это работать независимо от того, что я пытаюсь.

У кого-нибудь есть что-нибудь по этому поводу? Спасибо!

PS - обратите внимание, что в iOS мы недавно перешли от использования renderInContext к использованию вызова моментального снимка. Это не имеет абсолютно никакого значения для вопроса здесь, ура.

1 ответ

Как утверждает Apple Doc, атрибут viewPrintFormatter UIView определен в категории UIView, но он доступен только для экземпляров типа: UITextView, MKMapView и UIWebView.

Так что вы можете:

Другие вопросы по тегам