ios - Despido de UIPrintInteractionController
ipad uiprintinteractioncntrler (4)
Estoy usando UIPrintInteractionController
presentándolo desde rect.
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
// than set printing settings
...
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromRect:rect inView:view animated:YES completionHandler:completionHandler];
Que establezco el número de páginas (> 1) y selecciono una impresora. Antes de los dispositivos de rotación llamo
[controller dismissAnimated:animated];
de acuerdo con la documentación de Xcode: You should dismiss the printing options when they are presented in a sheet or animated from a rectangle and the user changes the orientation of the device.
Cuando presento UIPrintInteractionController
después de la rotación, el número de copias que se imprimen se vuelve a establecer en 1 (como en la vista inicial), mientras que la impresora permanece seleccionada. Las copias de Ivar de UIPrintInfo son privadas, por lo que no puedo obtenerlas y almacenarlas durante la rotación.
¿Cómo puedo restaurar el número de páginas de impresión después de la rotación?
Disculpe, esto puede parecer una pregunta obvia, pero ¿lo ha llamado como delegado?
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
controller.delegate = self;
Si lo entiendo correctamente, lo que realmente necesita es cómo ejecutar el código antes y después de los cambios de orientación:
En veloz
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
//code goes here to run before orientation change
coordinator.animate(alongsideTransition: nil, completion: {
_ in
//code goes here to run after orientation change
})
}
- (void)printImage:(id)sender {
// Obtain the shared UIPrintInteractionController
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
if(!controller){
NSLog(@"Couldn''t get shared UIPrintInteractionController!");
return;
}
// We need a completion handler block for printing.
UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(completed && error)
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
};
// Obtain a printInfo so that we can set our printing defaults.
for(int i=0;i<[paths count];i++)
{
NSString *strFilePath = [paths objectAtIndex:i];
NSLog(@"@ strFilePath is %@", strFilePath);
NSData *data = [NSData dataWithContentsOfFile:strFilePath];
if(data)
{
image = [UIImage imageWithData:data];
// [arrayOfImages addObject:image];
NSLog(@"@ image is %@", image);
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
// This application prints photos. UIKit will pick a paper size and print
// quality appropriate for this content type.
printInfo.outputType = UIPrintInfoOutputPhoto;
// The path to the image may or may not be a good name for our print job
printInfo.jobName = @"PNg";
NSLog(@"@ imageURL is %@", printInfo.jobName);
// printInfo.jobName
if(!controller.printingItems && image.size.width > image.size.height)
printInfo.orientation = UIPrintInfoOrientationLandscape;
// Use this printInfo for this print job.
controller.printInfo = printInfo;
controller.printingItems = nil;
}
}
#if DIRECT_SUBMISSION
// Use the URL of the image asset.
if(self.imageURL && [UIPrintInteractionController canPrintURL:self.imageURL])
controller.printingItem = self.imageURL;
#endif
// If we aren''t doing direct submission of the image or for some reason we don''t
// have an ALAsset or URL for our image, we''ll draw it instead.
if(!controller.printingItems){
// Create an instance of our PrintPhotoPageRenderer class for use as the
// printPageRenderer for the print job.
PrintPhotoPageRenderer *pageRenderer = [[PrintPhotoPageRenderer alloc]init];
pageRenderer.imageToPrint = image;
controller.printPageRenderer = pageRenderer;
[pageRenderer release];
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[controller presentFromBarButtonItem:self.printButton animated:YES completionHandler:completionHandler]; // iPad
}else
[controller presentAnimated:YES completionHandler:completionHandler]; // iPhone
}
[printInfo setValue:[NSNumber numberWithInteger:numberFile] forKey:@"copies"]
Puedes configurar y configurar @"copies"
de UIPrintInfo