#ios #swiftui #uiviewrepresentable #phlivephoto
#iOS #swiftui #uiviewrepresentable #phlivephoto
Вопрос:
Я пытаюсь создать базовое приложение 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(), похоже, не работает, все, что у меня есть, это обрезанное изображение. Ожидаемое поведение — у двух есть изображение с сохраненным соотношением сторон и пустое пространство на более короткой стороне. Возможно ли это вообще?
Ответ №1:
Сделайте это в исходном представлении, а в 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)
Комментарии:
1. Я люблю stack overflow и почти люблю вас сейчас за то, что вы ответили на мои вторые вопросы сегодня! Я потратил добрых два часа на борьбу, а затем вы принесли рабочее решение за три минуты. Это всего лишь небольшое замечание
.scaleAspectFit
, но оно работает!