I am trying to create a near real-time drawing of waveform data from within a SwiftUI app. The data is streaming in from the hardware and I've verified that the draw(in ctx: CGContext)
override in my custom CALayer
is getting called. I have added this custom CALayer
class as a sublayer to a UIView
instance that I am making available via the UIViewRepresentable
protocol.
The only time I see updated output from the CALayer
is when I rotate the device and layout happens (I assume). How can I force SwiftUI to update every time I render new data in my CALayer
?
More Info:
I'm porting an app from the Windows desktop. Previously, I tried to make this work by simply generating a new UIImage
from a CGContext
every time I wanted to update the display. I quickly exhausted memory with that technique because a new context is being created every time I call UIGraphicsImageRenderer(size:).image { context in }
. What I really wanted was something equivalent to a GDI
WritableBitmap
. Apparently this animal allows a programmer to continuously update and re-use the contents. I could not figure out how to do this in Swift without dropping down to the old CGBitmapContext
stuff written in C and even then I wasn't sure if that would give me a reusable context that I could output in SwiftUI each time I refreshed it. CALayer
seemed like the answer. I welcome any feedback on a better way to do what I'm trying to accomplish.