Существует ли существующая функция для рисования указанного прямоугольника вида в свой собственный CGLayer? - PullRequest
0 голосов
/ 01 апреля 2020

Я работаю с целью iOS 10 для корпоративного приложения (босс не хочет нацеливаться на более позднюю версию, поэтому библиотеки PDFKit и post- iOS 10 не обсуждаются) и нужно сделать некоторую пользовательскую обработку, чтобы превратить иерархию представления контроллера представления в документ PDF для счета. В настоящее время я обрабатываю это с помощью следующей логики c в своем пользовательском классе PDFGenerator:

// PDFGenerator instance variables used...
var vc_Invoice: InvoiceViewController?
var data_InvoicePDF: Data?

func renderInvoicePDF() { 
    guard let invoiceView = vc_Invoice?.view else {
        print("PDFGenerator error loading invoice's view")
        return
    }

    let invoicePDFData = NSMutableData()

    UIGraphicsBeginPDFContextToData(invoicePDFData, invoiceView.bounds, nil)
    UIGraphicsBeginPDFPage()
    guard let invoiceContext = UIGraphicsGetCurrentContext() else { return }
    invoiceView.layer.render(in: invoiceContext)
    UIGraphicsEndPDFContext()

    data_InvoicePDF = invoicePDFData as Data
}

Однако, в зависимости от количества позиций в счете, этот PDF-файл может стать очень высоким и превышать высоту стандартный лист бумаги. Мне нужно разбить документ на несколько страниц, но также необходимо, чтобы информация о заголовке компании, которая находится вверху документа, отображалась вверху каждой страницы.

Идея, которую я преследовал, чтобы достичь sh, заключается в том, чтобы записать раздел заголовка компании в отдельный слой, чтобы нарисовать его в верхней части каждой страницы, а затем записать последующие фрагменты представления. в свои собственные слои, чтобы затем положить их в PDFContext, итерируя по высоте представления, пока полная высота не будет разбита на страницы.

Я представляю себе некоторую функцию, которая принимает CGRect и UIView в качестве параметров, чтобы затем захватить эту часть сцены и вернуть ее как свой собственный объект слоя. Существует ли что-либо подобное в CoreGraphics или в любой другой библиотеке Cocoa Touch? Если нет, есть ли рекомендуемый маршрут к go о том, что я пытаюсь выполнить sh? Может быть, получить графический контекст для полного просмотра, а затем взять ректы из этого контекста?

Я прочитал руководство по программированию Quartz 2D и хорошо понимаю его на данный момент, но это мой первый время действительно пытается сделать любую сложную работу с Core Graphics.

Заранее благодарим за любую помощь!

...