Как [NSView cacheDisplayInRect:(NSRect)rect toBitmapImageRep:(NSBitmapImageRep *)bitmapImageRep]
работает внутри, когда записывает растровые данные в bitmapImageRep?
Например. он проходит и получает доступ к CALayer layer
всех подвидов и объединяет их, когда вызывается ...cacheDisplayInRect...
, или он просто записывает свой собственный слой (который тогда уже содержит данные представления для всех подвидов).
Предыстория моего вопроса: я использую собственный элемент управления (WKWebView), который не работает, когда дело доходит до снимков экрана (пример ТАК вопрос), и вместо того, чтобы заново изобретать колесо, чтобы сделать снимок экрана всего приложения, включая WKWebView, я хотел бы исправить метод, который Cocoa использует для растровых представлений.
cacheDisplay(in:to:)
. Я использую его для преобразования представлений SwiftUI (через NSView) в NSImage, чтобы поместить его в курсор мыши. Но мое приложение очень медленное, и мне трудно понять, почему. Имеет ли смысл использоватьNSView draw()
для ручного преобразования NSView (преобразованного из представления SwiftUI) в NSImage? 23.01.2020cacheDisplay(in:to:)
в NSImage было очень медленным для меня. Создание NSView с Cocoa Drawing и преобразование их в NSImage черезdataWithPDF(inside:)
ускорило создание NSImage примерно в 10 раз. 28.01.2020