Я пытаюсь создать базовое приложение Live Photo на SwiftUI и борюсь с отображением выбранной фотографии. Для этого я попытался сделать UIViewRepresentable для PHLivePhotoView:
import SwiftUI
import PhotosUI
struct LivePhotoView: UIViewRepresentable {
@Binding var livephoto: PHLivePhoto
func makeUIView(context: Context) -> PHLivePhotoView {
return PHLivePhotoView()
}
func updateUIView(_ lpView: PHLivePhotoView, context: Context) {
lpView.livePhoto = livephoto
}
}
В моем главном представлении я называю это так:
if pickerResult.count > 0 {
LivePhotoView(livephoto: $pickerResult[0])
}
Он отлично работает до того момента, когда я пытаюсь ограничить размер представления. Я хочу поместить предварительный просмотр в квадратную рамку с чем-то вроде этого
LivePhotoView(livephoto: $pickerResult[0])
.scaledToFit()
.frame(width: geo.size.width, height: geo.size.width, alignment: .center)
Но scaledToFit(), похоже, не работает, все, что у меня есть, это обрезанное изображение. Ожидаемое поведение состоит в том, чтобы иметь изображение с сохраненным соотношением сторон и пустым пространством на более короткой стороне. Это вообще возможно?
Сделайте это в исходном виде, а в SwiftUI ограничьте только кадр, например
func makeUIView(context: Context) -> PHLivePhotoView {
let photoView = PHLivePhotoView()
photoView.contentMode = .scaleAspectFit
return photoView
}
И (или даже без) модификатора frame
LivePhotoView(livephoto: $pickerResult[0])
.frame(width: geo.size.width, height: geo.size.width, alignment: .center)
Я люблю переполнение стека и почти люблю вас за ответы на мои вторые вопросы сегодня! Я потратил добрых два часа на борьбу, а потом ты принес рабочее решение за три минуты. Небольшое замечание, это .scaleAspectFit, но это работает!