Код: Выделить всё
struct MetalImageTransitionView: UIViewRepresentable {
let fromImage: MTIImage
let toImage: MTIImage
let effect: MTTransition
let duration: Double
@Binding var showToImage: Bool
func makeUIView(context: Context) -> MTIImageView {
let imageView = MTIImageView()
imageView.image = fromImage
imageView.contentMode = .scaleAspectFill
return imageView
}
func updateUIView(_ uiView: MTIImageView, context: Context) {
guard showToImage else { return }
effect.duration = duration
effect.transition(from: fromImage, to: toImage, updater: { image in
DispatchQueue.main.async {
uiView.image = image
}
}, completion: { _ in
DispatchQueue.main.async {
uiView.image = toImage
}
})
}
}
< /code>
struct MetalWaveTransitionView: View {
@State private var fromImage: MTIImage?
@State private var toImage: MTIImage?
@State private var showToImage = false
private let transitionDuration: TimeInterval = 1.5
private let transition = MTCrossWarpTransition() // also tried other MTTransition types
var body: some View {
ZStack {
if let from = fromImage, let to = toImage {
MetalImageTransitionView(
fromImage: from,
toImage: to,
effect: transition,
duration: transitionDuration,
showToImage: $showToImage
)
}
}
.onAppear {
loadImages()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
showToImage = true
}
}
}
func loadImages() {
if let from = UIImage(named: "imgCals"),
let to = UIImage(named: "imgBMI") {
fromImage = MTIImage(cgImage: from.cgImage!, options: [.SRGB: false], isOpaque: true)
toImage = MTIImage(cgImage: to.cgImage!, options: [.SRGB: false], isOpaque: true)
}
}
}
< /code>
Problem:
[list]
[*].none[*] Любой другой mttransition subclass (например, mtcrosswarptransition ) не оживляет.
[*] Заключитель Updater Closure называется, но не наблюдается визуализируемого транспорта. />
[*] Изображения совместимы с металлом (используя cgimage с isopaque: true и .srgb: false ).
[/list]
Вопрос. UiviewResentable , так что анимации перехода изображений фактически воспроизводятся для таких эффектов, как MtCrossWarpTransition , Mtzoomtransition и т. Д.? /> < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-only-non
Мобильная версия