ОК, вот что я сделал
Вариант 1. Использование UIView.layer для рендеринга в PDF CGContect
func drawLineGraph(x: CGFloat, y: CGFloat)->CGRect{
let width = (pageSize.width - 2*kBorderInset - 2*kMarginInset)/2.0 - 50.0
let renderingRect = CGRect(x: x, y: y + 50.0, width: width, height: 150.0)
// Create a view for the Graph
let graphController = LineChartController(rect: renderingRect, building: self.building)
if let currentContext = UIGraphicsGetCurrentContext() {
let frame = graphController.chartView.frame
currentContext.saveGState()
currentContext.translateBy(x:frame.origin.x, y:frame.origin.y);
graphController.chartView.layer.render(in: currentContext)
currentContext.restoreGState()
}
return renderingRect
}
graphController
это просто объект, который по существу имеет ту же функцию, что и обычный родительский элемент ViewController
, который будет содержать граф.Устанавливает параметры графика и данные.
Как только это будет сделано, вызывается следующая функция для рендеринга в контексте страницы PDF.
Для перевода графиков в правильное положение требуется немного перевода.
Вариант 2: Рисование на странице PDF CGContect
И решениеis ... ta da ...
func drawBarGraph(x: CGFloat, y: CGFloat)->CGRect{
let width = (pageSize.width - 2*kBorderInset - 2*kMarginInset)/2.0 - 50.0
let renderingRect = CGRect(x: x + width + 50, y: y + 50.0, width: width, height: 150.0)
// Create a view for the Graph
let graphController = BarChartController(rect: renderingRect, building: self.building)
if let currentContext = UIGraphicsGetCurrentContext() {
let frame = graphController.chartView.frame
currentContext.saveGState()
currentContext.translateBy(x:frame.origin.x, y:frame.origin.y)
//graphController.chartView.layer.render(in: currentContext)
graphController.chartView.draw(frame)
currentContext.restoreGState()
}
return renderingRect
}
Поскольку текущий контекст настроен на контекст страницы PDF, просто вызовите функцию charts draw()
, непосредственно передавая прямоугольник рамки.
Чтоя пропустил здесь, это может быть так просто?
Здесь вы можете найти копию сгенерированного PDF и пример кода .