我的视图中有一个最喜欢的按钮,其中有 NavigationLink。每次我按下最喜欢的按钮时,也会显示不透明动画。我不想在点击最喜欢的按钮时显示任何动画。 我知道如何在整个视图中删除动画,但我希望当我按下最喜欢的按钮之外时动画能够正常工作。
HStack {
Image(systemName: "a.book.closed.fill")
Text(book.name)
Spacer()
FavoriteButton(isFavorite: $isFavorite)
.onChange(of: isFavorite) { newValue in
book.isFavorite = newValue
model.saveData()
}
}
这是我的书行视图
ScrollView {
ForEach(model.savedBookEntities) { elem in
NavigationLink() {
VocaView(book: elem)
} label: {
BookRow(book: elem)
}
.contextMenu() {
// Some context menus
}
}
}
这是我在 NavigationView 中的 ScrollView。
Button(action: { isFavorite.toggle() })
{
if isFavorite {
Image(systemName: "star.fill")
}
else {
Image(systemName: "star")
}
}
这是FavoriteButton的代码
动画发生在可动画参数更改时。如果
FavoriteButton
没有改变内部的任何其他内容,则尝试禁用 isFavorite
的动画,例如
HStack {
Image(systemName: "a.book.closed.fill")
Text(book.name)
Spacer()
FavoriteButton(isFavorite: $isFavorite)
.onChange(of: isFavorite) { newValue in
book.isFavorite = newValue
model.saveData()
}
.animation(nil, value: isFavorite) // << here !!
}
//.animation(nil, value: isFavorite) // << or here !!
也
book.isFavorite
可能会产生影响,所以如果上述方法对您不起作用,请尝试使用 book.isFavorite
进行相同的操作。
@State var action: Int?
ViewEmitNavigation()
.onTapGesture {
action = 1 // make action equal to tag
}
.overlay {
NavigationLink(destination: DestinationView(), tag: 1, selection: $action) {}.opacity(0) // make it invisible
}
现在点击时的闪烁效果消失了