Swift 如何使用CGAffineTransform将旋转角度的锚点更改为中心?

Swift 如何使用CGAffineTransform将旋转角度的锚点更改为中心?,swift,swiftui,cgaffinetransform,Swift,Swiftui,Cgaffinetransform,出于某些原因,在我的SwiftUI应用程序中,我需要使用带有CGAffineTransform和rotationAngle属性的transformEffect修改器。但结果是: 如何将旋转角度的锚定设置为箭头图像的中心?我在文件中看到,我们可以使用CGPoint吗 我的代码: import SwiftUI import CoreLocation struct Arrow: View { var locationManager = CLLocationManager() @Obser

出于某些原因,在我的SwiftUI应用程序中,我需要使用带有CGAffineTransform和rotationAngle属性的transformEffect修改器。但结果是:

如何将旋转角度的锚定设置为箭头图像的中心?我在文件中看到,我们可以使用CGPoint吗

我的代码:

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设置变换动画。我贴了你关于如何做的另一个问题的答案。