Ios 斯威夫特:尝试旋转绘制的形状?

Ios 斯威夫特:尝试旋转绘制的形状?,ios,swift,rotation,core-graphics,core-animation,Ios,Swift,Rotation,Core Graphics,Core Animation,我在尝试旋转以下代码中绘制的形状时遇到问题:我尝试使用: triangle.transform = triangle.transform.rotated(by: 3.14159) 但这给了我一个错误“类型'catTransferM3D'的值没有成员'rotated'”。我不知道如何旋转这个形状 override func viewDidLoad() { super.viewDidLoad() let trianglePath = UIBezierPath() trian

我在尝试旋转以下代码中绘制的形状时遇到问题:我尝试使用:

triangle.transform = triangle.transform.rotated(by: 3.14159)
但这给了我一个错误“类型'catTransferM3D'的值没有成员'rotated'”。我不知道如何旋转这个形状

override func viewDidLoad() {
    super.viewDidLoad()
    let trianglePath = UIBezierPath()
    trianglePath.move(to: CGPoint(x: UIScreen.main.bounds.size.width * 0.5, y: UIScreen.main.bounds.height * 0.5))
    trianglePath.addLine(to: CGPoint(x: (UIScreen.main.bounds.size.width * 0.5) + 100, y: (UIScreen.main.bounds.height * 0.5) - 50))
    trianglePath.addLine(to: CGPoint(x: (UIScreen.main.bounds.size.width * 0.5) + 100, y: (UIScreen.main.bounds.height * 0.5) + 50))
    trianglePath.close()

    let triangle = CAShapeLayer()
    triangle.path = trianglePath.cgPath
    triangle.fillColor = UIColor.gray.cgColor
    self.view.layer.addSublayer(triangle)
}

使用此选项旋转三角形,可以使用
cGraffeTransform

 triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi))
或者使用
CATTransferorM3D
,通过pi在Z轴上旋转

 triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1)
但是为了完成这项工作,您还需要调整您的
CAShapeLayer
框架

 triangle.frame = self.view.bounds //this do the trick
用于在显示后设置动画

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    UIView.animate(withDuration: 0.1) { 
          triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi)) //this 
          triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1) //or this
    }
}

希望这有助于

使用它旋转三角形,您可以使用
cGraffineTransform

 triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi))
或者使用
CATTransferorM3D
,通过pi在Z轴上旋转

 triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1)
但是为了完成这项工作,您还需要调整您的
CAShapeLayer
框架

 triangle.frame = self.view.bounds //this do the trick
用于在显示后设置动画

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    UIView.animate(withDuration: 0.1) { 
          triangle.setAffineTransform(CGAffineTransform(rotationAngle: .pi)) //this 
          triangle.transform = CATransform3DMakeRotation(.pi, 0, 0, 1) //or this
    }
}

希望这有帮助提示:3D变换不支持围绕未指定轴旋转是有道理的:-)@NicolasMiari我以为我使用的变换是2D?我应该使用CATTransferm3dMakeRotation吗?提示:3D变换不支持围绕未指定轴旋转是有道理的:-)@NicolasMiari我以为我使用的变换是2D?我应该使用CATTransformM3dMakeRotation吗?给我错误:“无法将'cGraffinetTransform'类型的值分配给'cGTransform'”@diet7up抱歉,我没有看到您的三角形是shapeLayer,我将更新我的答案properly@Reiner这会旋转整个层吗?还是只是三角形?因为当使用此代码时,形状disappears@diet7up再次检查我的答案是否已编辑,问题是您的
CAShapeLayer的帧
感谢它为我工作:)当我将其放入动画中时,虽然它只是加载旋转,但如何使其在加载后旋转?给我错误:“无法将“CGAffineTransform”类型的值分配给“CGTransform3D”类型”“@diet7up抱歉,我没有看到你的三角形是一个变形器,我会更新我的答案properly@Reiner这会旋转整个层吗?还是只是三角形?因为当使用此代码时,形状disappears@diet7up再次检查我的答案是否已编辑,问题是您的
CAShapeLayer的帧
感谢它为我工作:)当我将其放入动画中时,虽然它只是加载旋转,但如何使其在加载后旋转?