Ich versuche zu spiegeln, was in einer Ansicht auf einem iPad auf einem externen Bildschirm passiert.Erfassen UIScrollView in UIImage beim Scrollen
func startMirroring() {
Timer.scheduledTimer(timeInterval:0.05, target: self, selector: #selector(tick), userInfo: nil, repeats: true)
}
func tick() {
let snapshot = someView.snapshotImage()
placeSomewhereElse(image: snapshot)
}
extension UIView {
func snapshotImage() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0)
drawHierarchy(in: bounds, afterScreenUpdates: false)
let snapshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return snapshotImage
}
}
Das Problem
Blätter in einem Scrollview wird nur im Snapshot reflektiert werden, nachdem Scrollen beendet ist. Ich glaube, der Scrollview aktualisiert seine Ansichtshierarchie und das Layout beim Scrollen auf Effizienz nicht wirklich. Ich muss es jedoch während des Scrollens erfassen.
Ich habe versucht:
- afterScreenUpdates: true
In scrollViewDidScroll:
- setNeedsDisplay()
- layoutIfNeeded()
- setNeedsLayout()
Ist es möglich Scrollviews während des Scrollens zu erfassen?
bearbeiten zu klären:
Hierarchie:
- UIWindow < - ich snapshot will diese
- ---- UIView
- -------- UIScrollView < - i habe keine Kenntnis von diesem
ich eine ganze Ansicht aufnehmen möchten, dass scrollviews enthalten ‚könnte‘ und nicht nur bestimmte scrollviews. Ich kann dies verwenden, um scrollviews in der Ansichtshierarchie anders zu behandeln, also ist das bereits großartig, aber idealerweise möchte ich es tun, ohne irgendwelche Kenntnisse über die Ansichtshierarchie zu haben. – matteok
Bitte behalten Sie jede Ansicht an der Stelle von scrollView.snapshotImage() (zB: someView.snapshotImage()), es funktioniert gut für mich. –
Ich habe meinen Beitrag bearbeitet, um eine mögliche Ansichtshierarchie anzuzeigen – matteok