我正在尝试在Swift中创建一个CGPath。我正在使用CGPathCreateWithRect(rect, transformPointer)
。
如何从UnsafePointer<CGAffineTransform>
获得CGAffineTransform
?我试过这个:
let transform : CGAffineTransform = CGAffineTransformIdentity
let transformPointer : UnsafePointer<CGAffineTransform> = UnsafePointer(transform)
我也试过这个:
let transform : CGAffineTransform = CGAffineTransformIdentity
let transformPointer : UnsafePointer<CGAffineTransform> = &transform
但斯威夫特抱怨'&' with non-inout argument of type...
。我也尝试将&transform
直接传递给CGPathCreateWithRect
但是停止时会出现同样的错误。
当我直接传递transform
时,Swift“无法将'CGAffineTransform'类型的值转换为预期的参数类型'UnsafePointer'”。
发生了什么,以及如何使用Swift 2.1?
答案 0 :(得分:16)
我也尝试过将&amp; transform直接传递给CGPathCreateWithRect ......
你快到了。 transform
需要是变量
为了将其作为inout参数传递给&
:
var transform = CGAffineTransformIdentity
let path = CGPathCreateWithRect(CGRect(...), &transform)
有关详细信息,请参阅"Interacting with C APIs" 在“使用Swift with Cocoa和Objective-C”文档中。
在 Swift 3 中,这将是
var transform = CGAffineTransform.identity
let path = CGPath(rect: rect, transform: &transform)
或者,对于身份变换,只需
let path = CGPath(rect: rect, transform: nil)
答案 1 :(得分:3)
@Martin R提供了最佳答案,但作为替代方案,我喜欢以这种方式使用我的不安全可变指针,以防你将来需要改变实际指针
let path = withUnsafeMutablePointer(&transform)
{
CGPathCreateWithRect(CGRect(...), UnsafeMutablePointer($0))
}