iOS SwiftUI: предотвращение изменения размера () анимации - PullRequest
1 голос
/ 14 марта 2020

У меня есть ячейка с изображением. Изображение загружается из inte rnet, и я хотел бы иметь переход непрозрачности затухания при загрузке изображения. Это легко сделать с помощью пары модификаторов:

.transition(.opacity)
.animation(.default)

Но так как мое изображение имеет также модификатор .resizable (), я также получаю анимацию масштабирования, которая мне действительно не нужна.

Как я могу предотвратить это?

struct GridCellView: View {

    @ObservedObject var model: CellViewModel

    var body: some  View {
        GeometryReader { proxy in
            Image(uiImage: self.model.image)
                .resizable()
                .transition(.opacity)
                .animation(.default)
                .scaledToFill()
                .frame(width: proxy.size.width, height: proxy.size.width)
                .aspectRatio(1/1, contentMode: .fit)
                .clipped()
                .animation(nil)
        }
    }

}

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Используйте .animation(nil) сразу после свойства / ов, какие анимации вы хотите отключить, как показано ниже

var body: some  View {
    GeometryReader { proxy in
        Image(uiImage: self.model.image)
            .resizable()
            .animation(nil)           // << disables animation
            .transition(.opacity)
            .animation(.default)      // << enables animation
            .scaledToFill()
            .frame(width: proxy.size.width, height: proxy.size.width)
            .aspectRatio(1/1, contentMode: .fit)
            .clipped()
    }
}
0 голосов
/ 14 марта 2020

Я бы добавил @State private var isDownloaded = false в вашу структуру. Затем, когда загрузка закончится, используйте троичный оператор для анимации прозрачности. Как то так.

    Image(uiImage: self.model.image)
        .resizable()
        .opacity(isDownloaded ? 1 : 0)
        .animation(.default)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...