如何创建一个 UIPrintPaper 来测试 UIPrintInteractionControllerDelegate
How to create a UIPrintPaper to test UIPrintInteractionControllerDelegate
写完 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方法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 是您的纸张尺寸。
无法控制 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
}
}
我认为您不应该创建 UIPrintPaper。 Apple API 调用:
- (UIPrintPaper*)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray<UIPrintPaper *> *)paperList
...在您的 UIPrintInteractionControllerDelegate 上,您的打印机支持的所有 UIPaper 数组。如果你没有得到你想要的,那么打印机不支持它。
因此,与其创建一个,不如实施此委托调用,并 return 来自打印机支持的参数的正确 UIPrintPaper。
写完 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方法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 是您的纸张尺寸。
无法控制 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
}
}
我认为您不应该创建 UIPrintPaper。 Apple API 调用:
- (UIPrintPaper*)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray<UIPrintPaper *> *)paperList
...在您的 UIPrintInteractionControllerDelegate 上,您的打印机支持的所有 UIPaper 数组。如果你没有得到你想要的,那么打印机不支持它。
因此,与其创建一个,不如实施此委托调用,并 return 来自打印机支持的参数的正确 UIPrintPaper。