XYZ*_*XYZ 5 core-data ios ios-animations swiftui
因为List、ForEach和CoreData是我认为的三个主要罪魁祸首......好吧,如果不只是.transition()它本身的话。
基本上,我想要一个存储在核心数据中的任务列表,并且在点击任务时,它就会随着.transition(.scale). 我尝试过的几种潜在解决方案在画布和模拟器中都失败了,其中两个是堆栈溢出:
其余的尝试只是将 插入.transition(.scale)到所有可能的位置,并且有/没有.animation(...)附加。
这是我的错误视图的基本结构:
struct DeadlineListView: View {
@FetchRequest(entity: Deadline.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \Deadline.dueTime, ascending: true)],
predicate: NSPredicate(format: "isCompleted == false"),
animation: Animation.linear(duration: 2)
) var deadlineList: FetchedResults<Deadline>
// some other vars...
var body: some View {
VStack(spacing: 0.0) {
HStack {
// some other views...
}
// --- Where things matter most ---
List {
ForEach(deadlineList, id: \.uid) { deadline in
Button(action: { isShowingDeadlineDetails = true }) {
DeadlineView(deadline: deadline)
}.sheet(isPresented: $isShowingDeadlineDetails) {
DeadlineDetailView(deadline: deadline)
}
.listRowInsets(EdgeInsets())
}
}
// --- Where things matter most ---
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以从技术上讲,我有一个 s 列表Button,看起来像DeadlineView(...).
DeadlineView(...)有一个按钮供用户点击以表示任务已完成:
Button(action: {
deadline.isCompleted = true
deadline.objectWillChange.send()
do {
try context.save()
} catch {
print("Unable to save deadline isCompleted in DeadlineView!")
}
}){
// some View...
}
Run Code Online (Sandbox Code Playgroud)
此按钮将使NSPredicate忽略此任务,从而使该任务从我的列表中消失。
是的,它确实可以制作动画。但是已完成的任务被它下面的任务挤压,没有任何可见的(至少对我来说).transition(.scale)。
.transition(.scale)回到第一个片段:
List {
ForEach(deadlineList, id: \.uid) { deadline in
Button(action: { isShowingDeadlineDetails = true }) {
DeadlineView(deadline: deadline)
// .transition(.scale) 1. HERE!
}
// 2. HERE!
.sheet(isPresented: $isShowingDeadlineDetails) {
DeadlineDetailView(deadline: deadline)
}
// 3. HERE!
.listRowInsets(EdgeInsets())
// 4. HERE!
}
// 5. HERE!
}
// 6. HERE!
Run Code Online (Sandbox Code Playgroud)
后面全部有/没有 .animation(.linear(duration: 2)) 附加。
正如您可能已经注意到的,duration动画 ( 2) 的 相当长,因此它的运行速度足够慢,足以让我观察到它transition确实没有运行。
但有趣的是,它并没有对此做出反应duration,无论是它0.2还是2(好吧,至少对我来说,它似乎不会持续几2秒钟)。
欢迎任何解决方案或解决方法。
由于过渡影响了这里的许多观点。您必须在内部进行与转换相关的更改
withAnimation(Animation.easeIn) { //here you can change the animation you want
//state changes should write here
}
Run Code Online (Sandbox Code Playgroud)
此链接可能有帮助 https://www.youtube.com/watch?v=3krC2c56ceQ
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |