Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SwiftUI:同步2个动画功能(CAMediaTimingFunction和Animation.timingCurve)_Swift_Macos_Swiftui - Fatal编程技术网

SwiftUI:同步2个动画功能(CAMediaTimingFunction和Animation.timingCurve)

SwiftUI:同步2个动画功能(CAMediaTimingFunction和Animation.timingCurve),swift,macos,swiftui,Swift,Macos,Swiftui,我使用的是camediatiming函数(用于窗口)和动画。计时曲线(用于内容)与相同的贝塞尔曲线和时间来处理大小调整。但是,可能存在非常小的时间差,因此会导致窗口不规则地闪烁。就像这样(GitHub存储库:;作者7ahang): 红色背景表示整个窗口,绿色背景表示内容。如您所见,在动画过程中,红色背景在某些点可见,这意味着内容有时比窗口小,因此它会产生额外的小空间,并导致不必要的抖动 在AppDelegate.swift中,我为主窗口使用了一个自定义的NSWindow类,并重写了setCon

我使用的是
camediatiming函数
(用于窗口)和
动画。计时曲线
(用于内容)与相同的贝塞尔曲线和时间来处理大小调整。但是,可能存在非常小的时间差,因此会导致窗口不规则地闪烁。就像这样(GitHub存储库:;作者7ahang):

红色背景表示整个窗口,绿色背景表示内容。如您所见,在动画过程中,红色背景在某些点可见,这意味着内容有时比窗口小,因此它会产生额外的小空间,并导致不必要的抖动

AppDelegate.swift
中,我为主窗口使用了一个自定义的
NSWindow
类,并重写了
setContentSize()

类AnimatableWindow:NSWindow{
var savedSize:CGSize=.0
重写func setContentSize(size:NSSize){
如果大小==savedSize{return}
savedSize=大小
NSAnimationContext.runAnimationGroup{中的上下文
context.timingFunction=CAMediaTimingFunction(控制点:0,0,0.58,1.00)//自定义贝塞尔曲线
context.duration=animationTime//自定义动画时间
animator().setFrame(NSRect(原点:frame.origin,大小:size),display:true,animate:true)
}
}
}
ContentView.swift
中,主要结构(简化):

struct ContentView:View{
@国家私有变量showsDrawer:Bool=false
var body:一些观点{
HStack{
辅助调节器()//左面板
HStack{
抽屉()//尺寸更改面板
.frame(宽度:showsDrawer?175:0,对齐方式:。尾部)
DrawerBar()//右栏
.ontapsigne{
使用动画(Animation.timingCurve(0,0,0.58,1.00,持续时间:animationTime)){//使用相同的Bézier曲线和动画时间
showsDrawer.toggle()
}
}
}
}
}
}
< P>动画对象的大小是在中间改变<代码>抽屉()/<代码>。我想这是因为两种方法的帧速率不同。我想知道如何同步这两个功能,以及是否有其他方法在SwiftUI中实现抽屉式视图。您可以克隆存储库。谢谢你的病人