Skip to content

Instantly share code, notes, and snippets.

@barabashd
Created February 12, 2022 14:59
Show Gist options
  • Save barabashd/b80eb70e2cfb33e3b58f445a24ba259c to your computer and use it in GitHub Desktop.
Save barabashd/b80eb70e2cfb33e3b58f445a24ba259c to your computer and use it in GitHub Desktop.
RenderView
class RenderView: UIView {
private var renderLayer: CALayer?
func update(renderLayer: CALayer) {
self.renderLayer = renderLayer
}
override func draw(_ rect: CGRect) {
guard let renderLayer = renderLayer,
let context = UIGraphicsGetCurrentContext() else { return }
renderLayer.render(in: context)
}
}
class ViewController: UIViewController {
private lazy var renderView = RenderView()
private var displayLink: CADisplayLink?
// TODO: setup renderView in viewDidLoad();
// TODO: add 'chartsPinnedView.update(renderLayer: renderLayer)' at place when 'renderLayer' is ready;
// 'renderLayer' - layer that will recorded in renderView;
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
displayLink = CADisplayLink(target: self, selector: #selector(displayLink(_:)))
displayLink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
displayLink?.invalidate()
}
@objc private func displayLink(_ displayLink: CADisplayLink) {
guard view.window != nil, !renderView.isHidden else { return }
renderView.setNeedsDisplay()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment