matchedGeometryEffect 对 ScrollView 内存泄漏
matchedGeometryEffect on ScrollView memory leaks
我正在使用 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()
}
}
}
}
}
卡片视图
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)
...
一切正常,但如果我取消注释注释行,滚动时内存使用量会增加。
有什么想法吗?
比你
已解决:我只是将视图嵌入到 VStack 中并释放了内存:
...
ForEach(viewModel.articles){ article in
VStack{
ArticleCardView(article: article, animation: animation, show: $show)...
我正在使用 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()
}
}
}
}
}
卡片视图
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)
...
一切正常,但如果我取消注释注释行,滚动时内存使用量会增加。
有什么想法吗? 比你
已解决:我只是将视图嵌入到 VStack 中并释放了内存:
...
ForEach(viewModel.articles){ article in
VStack{
ArticleCardView(article: article, animation: animation, show: $show)...