点击特定视图时如何删除 SwiftUI NavigationLink 中的动画

问题描述 投票:0回答:2

我的视图中有一个最喜欢的按钮,其中有 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的代码

swift animation swiftui swiftui-navigationlink
2个回答
0
投票

动画发生在可动画参数更改时。如果

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
进行相同的操作。


0
投票
@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
    }

现在点击时的闪烁效果消失了

© www.soinside.com 2019 - 2024. All rights reserved.