Animation 使用SwiftUI计算/预测帧的未来中心
Swift 5.2,iOS 13 我想在缩放帧后预测/计算帧的中心点,以便在缩放时将形状移动到该帧。如果我尝试在动画/动态中缩放视图并使其居中,它将不起作用,最终结果可能是中心点的组合。在下图中,蓝色框从右上角开始,我缩放并移动到中间。但正如你从绿色框中看到的,缩放已经弄乱了它需要到达的点 我以为乔治·里德会是答案,但我也从中得到了垃圾。花了一个多星期的时间尝试定制路线、位置和我能想到的一切。目前,我们正在关注一个屏幕站点百分比的解决方案,但显然它在不同大小的屏幕上效果不太好。这里有一个解决方案(使用Xcode 11.4/iOS 13.4测试)Animation 使用SwiftUI计算/预测帧的未来中心,animation,swiftui,scale,Animation,Swiftui,Scale,Swift 5.2,iOS 13 我想在缩放帧后预测/计算帧的中心点,以便在缩放时将形状移动到该帧。如果我尝试在动画/动态中缩放视图并使其居中,它将不起作用,最终结果可能是中心点的组合。在下图中,蓝色框从右上角开始,我缩放并移动到中间。但正如你从绿色框中看到的,缩放已经弄乱了它需要到达的点 我以为乔治·里德会是答案,但我也从中得到了垃圾。花了一个多星期的时间尝试定制路线、位置和我能想到的一切。目前,我们正在关注一个屏幕站点百分比的解决方案,但显然它在不同大小的屏幕上效果不太好。这里有一个解决方
}
.scaleEffect(zoom)//我知道你是如何做到的,但我不明白你想实现什么。是从屏幕右上角放大到屏幕中央吗?如果我知道目标的话,我可能会提出不同的方法。@Asperi是的,从屏幕右上角放大到屏幕中央太过分了。右上角小,中间大。中间偏大,右上偏小。
struct SwiftUIView2: View {
@State var relocate = Alignment.topTrailing
@State var zoom:CGFloat = 1.0
@State var tag:Bool = true
@State var tag2:Bool = false
@State var centerPoint: CGPoint = .zero
var body: some View {
ZStack {
ZStack(alignment: relocate) {
Rectangle()
.stroke(Color.blue, lineWidth: 2)
.frame(width: 32, height: 32, alignment: .center)
.onTapGesture {
withAnimation {
if self.tag {
self.zoom = 2.0
self.relocate = Alignment.center
} else {
self.relocate = Alignment.topTrailing
self.zoom = 1.0
}
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.tag.toggle()
}
}
.scaleEffect(zoom, anchor: .topLeading)
}.frame(width: 256, height: 256, alignment: relocate)
.border(Color.red)
if !tag {
ZStack {
Rectangle()
.stroke(Color.green, lineWidth: 2)
.frame(width: 32, height: 32, alignment: .center)
.onTapGesture {
self.tag.toggle()
}
}.frame(width: 256, height: 256, alignment: .center)
.scaleEffect(zoom, anchor: .center)
}
}
}
}
}
.scaleEffect(zoom) // << here !! (remove topLeading anchor)
}.frame(width: 256, height: 256, alignment: relocate)