matchedGeometryEffect при утечках памяти ScrollView
Я использую LazyVGrid, чтобы показать галерею статей. Все работает нормально, и у меня нет предупреждений о памяти, потому что каждый раз, когда представление покидает экран, использование памяти уменьшается.
Моя проблема в том, что я использую matchedGeometryEffect с изображением, чтобы синхронизировать анимацию с новым представлением.
Анимация работает отлично, но при прокрутке прокрутки объем памяти увеличивается. Похоже на то, что matchedGeometryEffect поддерживает ссылку на объект в памяти и не разрешает выпуски.
Контейнер
LazyVGrid(
columns: [
GridItem(.flexible())
],spacing: 16
){
ForEach(viewModel.articles){ article in
LazyVStack{
ArticleCardView(article: article, animation: animation, show: $show)
.onTapGesture {
withAnimation(.spring()){
selectedArticle = article
show.toggle()
}
}
}
}
}
CardView
VStack{
if !show {
Image(uiImage: readImage(name: "\(article.id)00"))
.resizable()
.aspectRatio(contentMode: .fit)
//.matchedGeometryEffect(id: "img\(article.id)00", in: animation)
...
Новый взгляд
VStack{
GeometryReader { geo in
TabView {
Image(uiImage: readImage(name: "\(article!.id)00"))
.resizable()
.aspectRatio(contentMode: .fit)
//.matchedGeometryEffect(id: "img\(article!.id)00", in: animation, isSource: false)
.tag(1)
...
Все работает идеально, но если я раскомментирую закомментированные строки, использование памяти увеличивается при прокрутке.
Любая идея? Чем ты
1 ответ
Решено: я просто вставляю представление в VStack, и воспоминания освобождаются:
...
ForEach(viewModel.articles){ article in
VStack{
ArticleCardView(article: article, animation: animation, show: $show)...