UIPrintPageRenderer paperRect всегда возвращает 0x0

Я настроил печать в своем приложении для iOS, и все работает нормально. Однако я создаю свой документ на основе предпочтений пользователя в отношении размера страницы. Я ожидал, что смогу определить размер страницы из системы принтера и использовать его вместо этого. Свойство paperRect в UIPrintPageRenderer похоже на то, что мне нужно, но оно всегда возвращает размер 0x0 для меня. Я что-то упускаю? Вот код:

UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
UIPrintPageRenderer *pageRenderer = [[UIPrintPageRenderer alloc] init];
printController.printPageRenderer = pageRenderer;
NSLog(@"paper size: %f x %f", pageRenderer.paperRect.size.width, pageRenderer.paperRect.size.height);

Я попробовал это, когда вышла iOS 4.2, и когда я получил 0x0, я решил, что это ошибка первой версии, и реализовал пользовательские настройки. Но теперь, когда я вижу ту же проблему в iOS 5.1, я думаю, что я делаю что-то не так.

Когда этот код запускается, пользователь еще не выбрал принтер, поэтому я ожидаю, что paperRect вернет размер бумаги по умолчанию. Если он запустится снова после того, как пользователь выберет принтер (например, при печати второго документа), я ожидаю, что он вернет размер бумаги, выбранный для этого принтера. Но это только мои ожидания... документация не объясняет, когда и как устанавливаются его значения.

Было бы полезно знать, получают ли другие такие же результаты или мне нужно сделать что-то еще, чтобы получить реальный размер страницы.

P.S. Я также посмотрел на свойство paperSize UIPrintInteractionController, которое также возвращает 0x0 при включении в приведенный выше код. По-видимому, он обновляется позже в процессе печати с помощью функции делегата, но я не стал исследовать это дальше.


person arlomedia    schedule 22.08.2012    source источник


Ответы (1)


paperRect и printableRect предназначены для использования в numberOfPages для вычисления количества страниц. UIKit не будет устанавливать какое-либо значение для paperRect и printableRect, пока пользователь не коснется кнопки «Печать» в UIPrintInteractionController.

person Community    schedule 21.12.2012
comment
Вы правы, когда я проверяю эти свойства из метода делегата UIPrintInteractionController printInteractionControllerDidFinishJob:, они устанавливаются. Проверка их перед печатью, чтобы получить размер бумаги по умолчанию, не работает, как я предполагал. - person arlomedia; 28.12.2012