Проблема с рендерингом считывателя геометрии SwiftUI
Посмотреть видео можно здесь -> https://youtu.be/_tkh1eHnXhw
Я загружаю изображение в класс загрузчика изображений.
Я не пробовал приложение на iPhone.
Класс загрузки изображения:
class ImageLoader: ObservableObject {
@Published var downloadImage: UIImage?
func fetchImage(url: String) {
guard let imsageURL = URL(string: url) else {
fatalError()
}
URLSession.shared.dataTask(with: imsageURL) { (data, response, error) in
guard let data = data, error == nil else {
fatalError()
}
DispatchQueue.main.async {
self.downloadImage = UIImage(data: data)
}
}.resume()
}
}
struct RemoteImage: View {
@ObservedObject var imageLoader = ImageLoader()
var placeholder: Image
init(url: String, placeholder: Image = Image(systemName: "photo")) {
self.placeholder = placeholder
imageLoader.fetchImage(url: "https://image.tmdb.org/t/p/w185_and_h278_bestv2\(url)")
}
var body: some View {
if let image = self.imageLoader.downloadImage {
return Image(uiImage: image).resizable()
}
return placeholder
}
}
struct RemoteImage_Previews: PreviewProvider {
static var previews: some View {
RemoteImage(url: "")
}
Я использую GeometryReader для 3D-анимации. При прокрутке происходит перезагрузка изображения.. Как исправить? Я немного знаю английский. Извините за мой английский.
Код GeometryReader:
ForEach(store.movie?.results ?? []) { item in
GeometryReader { geometry in
VStack {
RemoteImage(url: item.poster_path)
//Image("Film3")
.frame(width: 185, height: 278)
.cornerRadius(30)
.shadow(color: Color.black.opacity(0.4), radius: 10, x: 0, y: 10)
Text(item.title)
.font(.system(size: 20, weight: .bold))
CircleView(color1: #colorLiteral(red: 0.2196078449, green: 0.007843137719, blue: 0.8549019694, alpha: 1), color2: #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1), width: 50, height: 50, percent: 6.7, show: .constant(true))
}
.frame(maxHeight: UIScreen.main.bounds.height)
.offset(y: self.show ? .zero : -UIScreen.main.bounds.height)
.onTapGesture {
self.show.toggle()
self.movie = item
GenericApi().getTrailer(id: item.id) { (result) in
if result.results.isEmpty == false {
self.trailerID = result.results
} else {
self.alertShow = true
}
}
}
.rotation3DEffect(Angle(degrees: Double(geometry.frame(in: .global).minX - 30) / -20), axis: (x: 0, y: 10, z: 0))
}
}