Swift 如何使用CGAffineTransform将旋转角度的锚点更改为中心?
出于某些原因,在我的SwiftUI应用程序中,我需要使用带有CGAffineTransform和rotationAngle属性的transformEffect修改器。但结果是: 如何将旋转角度的锚定设置为箭头图像的中心?我在文件中看到,我们可以使用CGPoint吗 我的代码:Swift 如何使用CGAffineTransform将旋转角度的锚点更改为中心?,swift,swiftui,cgaffinetransform,Swift,Swiftui,Cgaffinetransform,出于某些原因,在我的SwiftUI应用程序中,我需要使用带有CGAffineTransform和rotationAngle属性的transformEffect修改器。但结果是: 如何将旋转角度的锚定设置为箭头图像的中心?我在文件中看到,我们可以使用CGPoint吗 我的代码: import SwiftUI import CoreLocation struct Arrow: View { var locationManager = CLLocationManager() @Obser
import SwiftUI
import CoreLocation
struct Arrow: View {
var locationManager = CLLocationManager()
@ObservedObject var heading: LocationManager = LocationManager()
private var animationArrow: Animation {
Animation
.easeInOut(duration: 0.2)
}
var body: some View {
VStack {
Image("arrow")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 300, height: 300)
.overlay(RoundedRectangle(cornerRadius: 0)
.stroke(Color.white, lineWidth: 2))
.animation(animationArrow)
.transformEffect(
CGAffineTransform(rotationAngle: CGFloat(-heading.heading.degreesToRadians))
.translatedBy(x: 0, y: 0)
)
Text(String(heading.heading.degreesToRadians))
.font(.system(size: 30))
.fontWeight(.light)
}
}
}
如果你想用变换矩阵,你需要平移,旋转,平移。但可以使用定位点执行旋转效果。请注意,默认定位点为“中心”。我只是明确地包含它,所以如果你想在其他地方旋转锚定,它是有效的 定位点在UnitPoint中指定,这意味着坐标为0到1。以0.5为中心
struct ContentView:View{
@国家私有变量角度:双=0
var body:一些观点{
VStack{
矩形().框架(宽度:100,高度:100)
.旋转效果(角度(度:角度),定位点:单位点(x:0.5,y:0.5))
滑块(值:$angle,单位:0…360)
}
}
}
使用矩阵的相同效果更难看,但也有效:
struct ContentView:View{
@国家私有变量角度:双=0
var body:一些观点{
VStack{
矩形().框架(宽度:100,高度:100)
.转型效应(
CGAffineTransform(translationX:-50,y:-50)
.连接(CGAffineTransform(旋转角度:CGFloat(角度*.pi/180)))
.连接(CGAffineTransform(translationX:50,y:50)))
滑块(值:$angle,单位:0…360)
}
}
}
您是否尝试执行.rotationEffect(角度(弧度:yourAngle))
(默认情况下有一个中心锚点)并将任何附加的Transform
转换链接到CGAffineTransform
translations?更新,添加了一个矩阵替代项。感谢您的回复。最后一个问题,即使CGAffineTransform不符合可设置动画的格式,也可以使用CGAffineTransform添加动画?您可以使用GeometryEffect设置变换动画。我贴了你关于如何做的另一个问题的答案。