Как использовать Mttransitions (металлические) в Swiftui для перехода изображения? Только. Не работает эффектIOS

Программируем под IOS
Ответить
Anonymous
 Как использовать Mttransitions (металлические) в Swiftui для перехода изображения? Только. Не работает эффект

Сообщение Anonymous »

Я пытаюсь использовать Mttransitions с Swiftui для создания переходов изображений с использованием металла. Он отлично работает в uikit, но когда я пытаюсь интегрировать его в Swiftui, используя uiviewrepresentable , только. None переходные работы - такие, как mtcrosswarptransition , mtzoomtransition и т. Д., Не показывать анимацию или эффект. />

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»