swift - 如何创建打印纸来测试 UIPrintInteractionController Delegate

标签 swift airprint uiprintinteractioncntrler

编写了 UIPrintInteractionControllerDelegate 后,我希望在 printInteractionController:choosePaper: 中对其纸张选择功能进行单元测试

其声明是:

optional func printInteractionController(_ printInteractionController: UIPrintInteractionController, choosePaper paperList: [UIPrintPaper]) -> UIPrintPaper

使用预定义的 UIPrintPaper 值调用它并检查输出很简单。但是我无法创建 UIPrintPaper 实例。以下是 UIPrintPaper 的声明方式:

NS_CLASS_AVAILABLE_IOS(4_2)__TVOS_PROHIBITED @interface UIPrintPaper : NSObject 

+ (UIPrintPaper *)bestPaperForPageSize:(CGSize)contentSize withPapersFromArray:(NSArray<UIPrintPaper *> *)paperList; // for use by delegate. pass in list

@property(readonly) CGSize paperSize;
@property(readonly) CGRect printableRect;

@end

paperSize 和 printableRect 属性是只读的,没有初始化程序来定义它们。如何创建 UIPrintPaper 来代表我的测试的不同纸张尺寸? (A4、美国信函、4x6...)

最佳答案

无法控制 UIPrintPaper,但对其进行子类化以覆盖其只读属性是直接的:

class FakePrintPaper: UIPrintPaper {

    private let size: CGSize
    override var paperSize: CGSize { return size }
    override var printableRect: CGRect  { return CGRect(origin: CGPointZero, size: size) }

    init(size: CGSize) {
        self.size = size
    }
}

关于swift - 如何创建打印纸来测试 UIPrintInteractionController Delegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37551043/

相关文章:

iphone - UIMarkupTextPrintFormatter 在页面底部留下 2-3 英寸的空白区域

ios - 在 iOS < 4.2 中找不到 UIPrintInfo 符号错误

ios - 在 iOS 中更改图像的打印尺寸

ios - 如何格式化 elapsedTime 从 00 :00:00 instead of the default 07:00:00 in Swift 开始

objective-c - Objective-C 如何调用 Swift 方法?

objective-c - 使用 AirPrint 打印 UIImage 导致内容被截断

ios - 如何通过 UIActivityViewController 打印 UIWebView?

ios - 无法使用 cloudkit 从公共(public)数据库中获取记录

swift - Firestore addSnapshotListener 在新对象进入时替换对象数据