如何创建UIPrintPaper来测试UIPrintInteractionControllerDelegate

时间:2016-05-31 16:27:30

标签: swift airprint uiprintinteractioncntrler

编写了log4j.appender.file.File=C:\\Users\\Madjura\\Desktop\\log.log 之后,我希望在UIPrintInteractionControllerDelegate

中对其纸张选择功能进行单元测试

其声明是:

printInteractionController:choosePaper:

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

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

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

3 个答案:

答案 0 :(得分:1)

无法控制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
    }
}

答案 1 :(得分:0)

使用UIPrintPaper类方法bestPaperForPageSize

let paper = UIPrintPaper.bestPaperForPageSize(CGSize(...), withPapersFromArray: [...])

我想你会想要像这样使用它:

class MyClass: NSObject { }

extension MyClass: UIPrintInteractionControllerDelegate {
    func printInteractionController(printInteractionController: UIPrintInteractionController, choosePaper paperList: [UIPrintPaper]) -> UIPrintPaper {
        return UIPrintPaper.bestPaperForPageSize(CGSize(...), withPapersFromArray: paperList)
    }
}

CGSize是您的纸张尺寸。

答案 2 :(得分:0)

我不认为你应该创建UIPrintPaper。 Apple API调用:

- (UIPrintPaper*)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray<UIPrintPaper *> *)paperList

...在您的UIPrintInteractionControllerDelegate上,您的打印机支持的所有UIPaper数组。如果你没有得到你想要的那个,那么打印机就不支持它。

因此,不是创建一个,而是实现此委托调用,并从打印机支持的参数中返回正确的UIPrintPaper。