在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)