Почему мое представление иногда не обновляется?IOS

Программируем под IOS
Ответить
Anonymous
 Почему мое представление иногда не обновляется?

Сообщение Anonymous »

Эта проблема иногда возникает. Моя точка зрения выглядит упрощенно следующим образом:

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

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
}
}
Как видите, я украсил предварительное фото с помощью @MainActor.
На некоторых в редких случаях, когда я нажимаю кнопку «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()
}
}
}
}
Вид иногда обновляет только нижнюю часть, а не верхнюю. Это заставляет меня подозревать, что это какая-то гонка или что это связано с camera.preview.
Еще следует отметить, что я использую новую платформу наблюдения iOS 17.


Подробнее здесь: https://stackoverflow.com/questions/786 ... -to-update
Ответить

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

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

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

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

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