在Swift中尝试使用CGPathCreateWithEllipseInRect函数时,我遇到了以下问题:

这段代码可以正常工作,我可以找到一个路径并可以使用它:

CGPathCreateWithEllipseInRect(CGRect(x: xCoord, y: yCoord,
                width: theWidth, height: theHeight), nil)

但这不起作用:
var affineTransform = CGAffineTransformMakeRotation(1.0)

CGPathCreateWithEllipseInRect(CGRect(x: xCoord, y: yCoord,
                width: theWidth, height: theHeight), &affineTransform)

看来我一无所有(或一条空路)。我究竟做错了什么?

最佳答案

您的第二个代码

var affineTransform = CGAffineTransformMakeRotation(1.0)

let path = CGPathCreateWithEllipseInRect(CGRect(x: xCoord, y: yCoord,
                width: theWidth, height: theHeight), &affineTransform)

是正确的并且确实有效。但是请注意,您创建了一个轮播
围绕视图原点的角度为1.0 * 180 /π≈57度
(默认情况下是左上角)。
这可能会将椭圆移出视图的可见范围。

传递nil转换的等效方式是旋转
大约零角度
var affineTransform = CGAffineTransformMakeRotation(0.0)

如果您打算旋转一度,请使用
var affineTransform = CGAffineTransformMakeRotation(CGFloat(1.0 * M_PI/180.0))

如果您打算将椭圆绕其中心旋转,
那么您必须将旋转与翻译结合起来
使椭圆的中心成为坐标系的原点:
var affineTransform = CGAffineTransformMakeTranslation(xCoord + theWidth/2.0, yCoord + theHeight/2.0)
affineTransform = CGAffineTransformRotate(affineTransform, angle)
let path = CGPathCreateWithEllipseInRect(CGRect(x: -theWidth/2.0, y: -theHeight/2.0,
    width: theWidth, height: theHeight), &affineTransform)

10-07 18:35