我使用IOS 9 SDK构建了一个应用程序。
我使用UIPrintInteractionController和UIPrintPageRenderer的子类进行打印。
当iPad或iPhone上显示打印对话框时,UIPrintPageRenderer的drawPageAtIndex:inRect方法未被调用,对话框上的预览区域只是一个灰色框,其中有一个按钮,表示第1页。
这是一款最初是在IOS 6时代编写的应用程序,我正在尝试为IOS 9更新它,所以也许我需要改进一些东西。
有谁知道这里发生了什么?
谢谢!
答案 0 :(得分:4)
我不明白究竟发生了什么,但我遇到了同样的问题并通过
修复了它1)确保我的覆盖中的逻辑正在UI线程上执行
2)将我的AddPrintFormatter调用移动到构造函数方法,而不是从NumberOfPages覆盖调用(这允许我删除此覆盖属性)。
现在,当重写UIPrintPageRenderer时,似乎有一些奇怪的线程行为(至少在Xamarin的实现中)。
例如,添加此简单覆盖会导致我出现UIKit一致性错误:
public override nint NumberOfPages
{
get
{
return base.NumberOfPages;
}
}
因此,当没有覆盖时,基本方法似乎开始在UI线程上执行,但子类的覆盖开始在工作线程上执行。
iOS9 SDK发行说明文档说:
“必须使用iOS 9 SDK构建UCIrintPageRenderer或UIPrintFormatter子类以绘制内容以进行打印的应用程序才能显示预览.UIPrintPageRenderer的行为已更新为调用drawPageAtIndex:inRect:多次可能具有不同的页面大小和可以从非主线程调用UIPrintPageRenderer上的各种方法,但不能同时从多个线程调用。“
答案 1 :(得分:3)
原来我在UIPrintPageRenderer派生类中缺少numberOfPages覆盖。添加此覆盖后预览工作。
自从帖子切向提到numberOfPages方法以来,我给了carchase一个upvote,但我的实际问题并不像carchase的帖子那样微妙; - )。
答案 2 :(得分:0)
听起来你需要添加打印格式化程序。
[myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];