Проблема рендеринга геометрии в SwiftUI - PullRequest
0 голосов
/ 02 апреля 2020

Вы можете посмотреть видео здесь -> 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-анимации. При прокрутке происходит перезагрузка изображения .. Как можно исправить? Я знаю маленький английский sh. Извините за мой Engli sh.

Код 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))
                        }
                    }
...