8

我正在尝试在 Swift 中创建一个 CGPath。我正在使用CGPathCreateWithRect(rect, transformPointer).

我怎样才能UnsafePointer<CGAffineTransform>从 a 中得到一个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 一起工作?

4

2 回答 2

18

我也尝试将 &transform 直接传递到 CGPathCreateWithRect ...

你快到了。transform需要是一个变量 ,以便将其作为 inout 参数传递&

var transform = CGAffineTransformIdentity
let path = CGPathCreateWithRect(CGRect(...), &transform)

有关更多信息,请参阅“ 将 Swift 与 Cocoa 和 Objective-C 结合使用”文档中的“与 C API 交互”。


Swift 3中,这将是

var transform = CGAffineTransform.identity
let path = CGPath(rect: rect, transform: &transform)

或者,对于恒等变换,只是

let path = CGPath(rect: rect, transform: nil)
于 2015-12-17T19:42:48.333 回答
3

@Martin R 提供了最佳答案,但作为替代方案,我喜欢以这种方式使用我的不安全可变指针,以防您将来需要更改实际指针

let path = withUnsafeMutablePointer(&transform)
{
  CGPathCreateWithRect(CGRect(...), UnsafeMutablePointer($0))
}
于 2015-12-17T19:54:08.253 回答