2015-10-18 4 views
2

Я создал приложение с использованием IOS 9 SDK.Исходный предварительный просмотр IOS 9 не отображается

Я печатаю с использованием UIPrintInteractionController и подкласса UIPrintPageRenderer.

Когда диалоговое окно печати отображается на IPad или iPhone, UIPrintPageRenderer-х drawPageAtIndex: метод inRect не вызывается и область предварительного просмотра в диалоговом окне просто серая коробка с кнопкой, которая говорит, что страница 1.

Это приложение, которое было первоначально написано в эпоху IOS 6, и я пытаюсь обновить его для IOS 9, поэтому, возможно, мне нужно что-то улучшить.

Кто-нибудь знает, что здесь происходит?

Спасибо!

+0

Существует множество причин, по которым это может произойти. См. Мой длинный ответ с полным примером здесь: http://stackoverflow.com/questions/5060855/printing-contents-of-multiple-uiwebviews-in-one-go/35769422#35769422 –

ответ

3

Оказывается, я пропускал NUMBEROFPAGES переопределить в производном классе UIPrintPageRenderer. Предварительный просмотр работает после добавления этого переопределения.

Я даю carchase upvote, так как сообщение, касательное, упомянуто методом numberOpPages, но моя фактическая проблема была не такой тонкой, как предполагалось после публикации carchase ;-).

4

Я не понимаю, что именно происходит, но у меня была такая же проблема, и фиксировали его

1) обеспечение того, чтобы логика в моих переопределяет это выполняется на UI потоке

2) шевелить AddPrintFormatter вызов метода конструктора вместо вызова из переопределения NumberOfPages (что позволило мне удалить это свойство переопределения).

Похоже, что при переопределении UIPrintPageRenderer (по крайней мере, в реализации Xamarin) существует какое-то странное поведение потоков.

Например, добавление этого простого переопределения вызывает ошибку UIKit непротиворечивости для меня:

public override nint NumberOfPages 
{ 
    get 
    { 
     return base.NumberOfPages; 
    } 
} 

Таким образом, кажется базовый метод начинает выполнение в потоке пользовательского интерфейса, когда не переопределение, но переопределения подкласса начинает выполнение на рабочем потоке.

Документ iOS9 SDK Заметки о выпуске говорит:.

«Приложение, подклассы UIPrintPageRenderer или UIPrintFormatter сделать содержание для печати должно быть построено с SDK IOS 9 для предварительного просмотра, чтобы отобразить поведение UIPrintPageRenderer обновлено до call drawPageAtIndex: inRect: несколько раз с потенциально разными размерами страниц и полями. Различные методы в UIPrintPageRenderer можно вызывать из не основного потока, но не из нескольких потоков одновременно ».

0

Похоже, вам нужно добавить форматирование печати.

[myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];

Смежные вопросы