Ответ 1
Извините, это может показаться немного очевидным вопросом, но вы назвали его делегатом?
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
controller.delegate = self;
Я использую UIPrintInteractionController
, представляя его из rect.
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
// than set printing settings
...
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
[controller presentFromRect:rect inView:view animated:YES completionHandler:completionHandler];
Чем я определил количество страниц ( > 1) и выберите принтер. Перед вращением устройств я вызываю
[controller dismissAnimated:animated];
согласно документации 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.
Когда я представляю UIPrintInteractionController
после вращения, количество копий печати устанавливается на 1 (как в исходном виде), тогда как принтер остается выбранным.
Ivar _copies из UIPrintInfo является приватным, поэтому я не могу его получить и хранить во время вращения.
Как восстановить количество страниц печати после вращения?
Извините, это может показаться немного очевидным вопросом, но вы назвали его делегатом?
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
controller.delegate = self;
[printInfo setValue:[NSNumber numberWithInteger:numberFile] forKey:@"copies"]
Вы можете установить и установить @"copies"
для UIPrintInfo
Если я правильно вас понимаю, вам действительно нужно, как запустить код до и после изменения ориентации:
В быстрой:
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
}