이 답변에도 불구하고 실제로 기본적인 질문에 답하지 않고 해결 방법을 제공합니다.
방금 비슷한 문제가 있습니다. 객체 당 배열이 각 페이지 당 하나의 NSView
하위 클래스로 렌더링되었습니다. 여기에 내가
1) 우리는 귀하의 경우에는 그와 관련된 모델 (NSImage
이있는 NSView
서브 클래스, ModelData
이 ... 모든 페이지를 보유하고 커다란 뷰를 생성하는 바로크 말도하지 않고, 그것을 해결 방법은 내 case)
class BaseView: NSView {
var modelData: ModelData /* Whatever your view needs to draw */
//...
}
2) 우리는 문서 컨트롤러에 var models: [ModelData]
이라는 배열을 가지고 있습니다.
3) 프린터보기가 될 새 하위 클래스를 만듭니다.
class PrinterView: BaseView {
var pageIndex: Int = 1
var modelArray: [ModelData]
init(frame: NSRect, models: [ModelData]) {
self.modelArray = models
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("invalid initializer")
}
override func knowsPageRange(_ range: NSRangePointer) -> Bool {
range.pointee.location = 1
range.pointee.length = self.modelArray.count
return true
}
override func rectForPage(_ page: Int) -> NSRect {
self.pageIndex = page
return self.bounds
}
override func draw(_ dirtyRect: NSRect) {
self.model = self.modelArray[self.page - 1] // Pages are 1, not 0, based
super.draw(dirtyRect)
}
} // That's it! That's all...
4) 문서 컨트롤러에서이 작업을 수행합니다 :
override func printOperation(withSettings printSettings: [String : Any]) throws -> NSPrintOperation {
self.printInfo.horizontalPagination = .fitPagination
self.printInfo.verticalPagination = .clipPagination
let printView = PrinterView(size: self.printInfo.paperSize, models: self.models)
return NSPrintOperation(view: printView, printInfo: self.printInfo)
}
나는이에 대한 새로운 솔루션을 게시했습니다. – Grimxn