Воздушная печать вида

я использую xcode 5. Я хотел бы знать, как распечатать текущий вид. Итак, простая кнопка с надписью «печать», а затем, когда пользователь нажимает на нее, печатает все на экране. Как бы я это реализовал?


person user2972076    schedule 09.11.2013    source источник


Ответы (2)


Сделать скриншот вида

и сохраните как png в пути и передайте данные в UIPrintInteractionController

СНИМОК ЭКРАНА

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGRect rect=self.view.frame;


CGImageRef cropped1 = CGImageCreateWithImageInRect(viewImage.CGImage, rect);
UIImage *imges =  [UIImage imageWithCGImage:cropped1]; 
CGImageRelease(cropped1);
// squarecropimg.image=imges;

NSData *date=UIImagePNGRepresentation(imges);
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *doc=[paths objectAtIndex:0];
NSString *appstr=[doc stringByAppendingPathComponent:@“currentview.png"];

[дата writeToFile:appstr атомарно:YES];

Передайте данные CURRENTVIEW.PNG на принтер

person Parthi    schedule 09.11.2013
comment
К вашему сведению: ВАМ НЕ нужно записывать образ по пути, пока он не потребуется. ВЫ можете просто передать данные из UIImagePNGRepresentation и перейти к воздушной печати - person Parthi; 09.11.2013
comment
Спасибо, а добавить ли что-нибудь в файл .h? Извините, я действительно новичок в разработке xcode @Parthi - person user2972076; 09.11.2013
comment
Не нужно ничего добавлять в файл. - person Parthi; 09.11.2013

ДЛЯ интеграции UIPrintInteraction добавьте UIPrintInteractionControllerDelegate и используйте приведенный ниже код.

UIPrintInteractionController *print_picker = [UIPrintInteractionController sharedPrintController];

if(print_picker && [UIPrintInteractionController canPrintData: **CURRENTIMAGE DATA HERE** ] ) {

    print_picker.delegate = self;

    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = @"JOBNAME";
    printInfo.duplex = UIPrintInfoDuplexLongEdge;
    print_picker.printInfo = printInfo;
    print_picker.showsPageRange = YES;
    print_picker.printingItem = **CURRENTIMAGE DATA HERE**;

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
        //self.content = nil;
        if (!completed && error) {
            NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
        } 
    };

    [print_picker presentAnimated:YES completionHandler:completionHandler];

} 
person Parthi    schedule 09.11.2013
comment
Простите, что беспокою и раздражаю вас, но что я имею в виду, помещая ТЕКУЩИЕ ДАННЫЕ ИЗОБРАЖЕНИЯ ЗДЕСЬ и в [self getimagedate]; Я получаю ошибки только для этих двух. Еще раз спасибо - person user2972076; 09.11.2013
comment
Вам нужно поставить См. первый код для скриншота NSData *date=UIImagePNGRepresentation(imges); эта дата как в CURRENTIMAGE DATA. Я отредактировал свой ответ выше - person Parthi; 09.11.2013