Как настроить различное поведение при работе с доступностью ViewModifier и iOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как настроить различное поведение при работе с доступностью ViewModifier и iOS?

Сообщение Anonymous »

Вот мой demoview :
struct ImageCropData: Identifiable {
var id = UUID()
var image: UIImage?
}

typealias CropImageHandler = (UIImage) async throws -> String

struct DemoView: View {
@State private var data: ImageCropData?
var body: some View {
VStack {
Button {
data = ImageCropData(image: nil)
} label: {
Text("abc")
}
}
.demo(data: $data) { image in
print("do anything with image") // I need this block called everytime, no matter what ios system is in use
return ""
}
}
}

extension View {
func demo(data: Binding, completion: @escaping CropImageHandler) -> some View {
modifier(DemoModifier(croppingData: data, completion: completion))
}
}

struct DemoModifier: ViewModifier {
@Binding var croppingData: ImageCropData?
var completion: CropImageHandler
func body(content: Content) -> some View {
if #available(iOS 17.0, *) {
content
.fullScreenCover(item: $croppingData) { data in
Text("Example View")
}
} else {
// content
// .task {
// Task {
// print("different behavior")
// if let image = croppingData?.image {
// _ = try await completion(image)
// }
// }
// }
// What should I do here to return content and call completion immediately when iOS is 16.4 and lower.?
}
}
}

< /code>
Просто, когда называется демо -модификатор, мне нужно две вещи: < /p>
  • Если iOS составляет 17 или более, тогда отображайте другой вид и заботится о завершении внутри. Это нормально, и работает < /li>
    Если iOS составляет 16,4 или меньше, верните только это представление и немедленно вызовите завершение с данным изображением. Вы можете подумать, что всегда есть изображение. Как я могу этого добиться?


Подробнее здесь: https://stackoverflow.com/questions/797 ... s-availabi
Ответить

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

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

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

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

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