Код: Выделить всё
struct CameraView: View {
@State var camera: Camera
var body: some View {
VStack{
if let uiImage = camera.previewPhoto {
ImageView(uiImage)
SomeOtherButton()
} else {
camera.preview
CapturePhotoButton(camera) // has a button that calls camera.capturePhoto()
}
}
}
}
Код: Выделить всё
@Observable
class Camera {
@ObservationIgnored private let captureSession: MyCustomCaptureSession
@ObservationIgnored @MainActor var preview: some View {
captureSession.preview // Just a wrapper view around AVCaptureVideoPreviewLayer
}
@MainActor var previewPhoto: UIImage?
@MainActor func capturePhoto() async {
// Take a photo using a captureSession
print("AT POINT A")
previewPhoto = capturedPhoto
}
}
На некоторых в редких случаях, когда я нажимаю кнопку «capturePhoto» (здесь не показано), я вижу, что строка В ТОЧКЕ A печатается, но представление не обновляется. Это сбивает меня с толку, и его действительно сложно отладить, есть идеи?
Одна вещь, которую я заметил, это то, что если я разобью CameraView на верхнюю и нижние половинки:
Код: Выделить всё
struct CameraView: View {
@State var camera: Camera
var body: some View {
VStack{
if let uiImage = camera.previewPhoto {
ImageView(uiImage)
} else {
camera.preview
}
if let uiImage = camera.previewPhoto {
SomeOtherButton()
} else {
CapturePhotoButton(camera) // has a button that calls camera.capturePhoto()
}
}
}
}
Еще следует отметить, что я использую новую платформу наблюдения iOS 17.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -to-update
Мобильная версия