Следующие примеры в Swift показывают, как я сделал то, что задает исходный вопрос, как в iOS, так и в OSX.
Примечание: когда вы создаете CGLayer, предоставленный вами графический контекст используется исключительно в качестве ссылки для инициализации слоя. В него не отправляется никакой контент или что-либо еще - это просто должен быть правильный ТИП контекста, чтобы API знал, какой уровень создать.
В этом примере я создаю CGLayer в контроллере представления и рисую на нем. Затем я визуализирую его на экране с помощью метода drawRect () представления.
пример iOS
Контроллер представления
import UIKit
class ViewController: UIViewController {
@IBOutlet var myView: MyView!
override func viewWillAppear(animated: Bool) {
// get the current graphics context - any context relevant to the screen
// will do for this purpose
let currentGraphicsContext = UIGraphicsGetCurrentContext()
// create a GCLayer with low level properties appropriate to the device
// screen and a size of 100 x 100
// this process doesn't send any content to windowGraphicsContext, it just
// copies some of the low level fields about the screen
let newLayer = CGLayerCreateWithContext(currentGraphicsContext,
CGSize(width: 100, height: 100),
nil)
// store a reference to the layer in a property of the view so that the
// view can display it
myView.layerRef = newLayer
// create a new graphics context for the layer so that we can draw on it
let myLayerContext = CGLayerGetContext(newLayer)
// draw some content on the layer
CGContextSetFillColorWithColor(myLayerContext, UIColor.redColor().CGColor)
CGContextFillRect(myLayerContext,
CGRect(x: 0, y: 0, width: 100, height: 50))
CGContextSetFillColorWithColor(myLayerContext, UIColor.blueColor().CGColor)
CGContextFillRect(myLayerContext,
CGRect(x: 0, y: 50, width: 50, height: 50))
}
}
Подкласс UIView
import UIKit
class MyView: UIView {
// a reference to the layer created by the view controller
var layerRef: CGLayer?
override func drawRect(rect: CGRect) {
// get a graphics context for the view
let myViewGraphicsContext = UIGraphicsGetCurrentContext()
// draw the layer into the view
CGContextDrawLayerAtPoint(myViewGraphicsContext,
CGPoint(x: 20 , y: 20),
self.layerRef)
}
}
Пример OSX
Контроллер представления
import Cocoa
class ViewController: NSViewController {
@IBOutlet var myView: MyView!
override func viewWillAppear() {
// get a graphics context for the window that contains the view - any
// context relevant to the screen will do
let windowGraphicsContext = NSGraphicsContext(window: myView.window!)
// create a GCLayer with low level properties appropriate to the device
// screen and a size of 100 x 100
// this process doesn't send any content to windowGraphicsContext, it just
// copies some of the low level fields about the screen
let newLayer = CGLayerCreateWithContext(windowGraphicsContext.CGContext,
CGSize(width: 100, height: 100), nil)
// store a reference to the layer in a property of the view, so that the
// view can display it
myView.layerRef = newLayer
// create a new graphics context for the layer so that we can draw on it
let myLayerContext = CGLayerGetContext(newLayer)
// do some drawing on the layer
CGContextSetFillColorWithColor(myLayerContext, NSColor.redColor().CGColor)
CGContextFillRect(myLayerContext,
CGRect(x: 0, y: 0, width: 100, height: 50))
CGContextSetFillColorWithColor(myLayerContext, NSColor.blueColor().CGColor)
CGContextFillRect(myLayerContext,
CGRect(x: 0, y: 50, width: 50, height: 50))
}
}
Подкласс NSView
import Cocoa
class MyView: NSView {
// a reference to the layer created by the view controller
var layerRef: CGLayer?
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
// get a graphics context for the view
let graphicsContext = NSGraphicsContext.currentContext()?.CGContext
// draw the layer into the view
CGContextDrawLayerAtPoint(graphicsContext,
CGPoint(x: 20 , y: 20),
self.layerRef)
}
}
person
Martin CR
schedule
20.07.2016