2015-12-17 15 views
6

私はSwiftでCGPathを作成しようとしています。私はCGPathCreateWithRect(rect, transformPointer)を使用しています。UnsafePointer <CGAffineTransform> from CGAffineTransform

CGAffineTransformからUnsafePointer<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...文句を言います。またCGPathCreateWithRectに直接&transformを渡そうとしましたが、同じエラーで停止します。

transformを直接渡すと、「CGAffineTransform型の値を予想される引数型「UnsafePointer」に変換できません」というメッセージが表示されます。

何が起こっているのですか、Swift 2.1でこのことをどうすればできますか?

答えて

3

@Martin Rは、最良の答えを提供しますが、代替として、私は、将来の実際のポインタを変更する必要がある場合に備えて、私の安全ではない可変ポインタをこのように使用したい。

最新のスウィフト/ Xcodeで
let path = withUnsafeMutablePointer(&transform) 
{ 
    CGPathCreateWithRect(CGRect(...), UnsafeMutablePointer($0)) 
} 
+1

あなたは*可変ポインタを必要とせず、ポインタキャストを必要としないので、 'withUnsafePointer(&transform){CGPathCreateWithRect(CGRect()、$ 0)}'に短縮することができます。 - 私は、CGPathCreateWithRect()*がデータをコピーしてポインタを保持しないと確信しています。さもなければ、C言語では(ローカル)配列のアドレスをその関数に渡すことはできません。 –

+0

それは本当です、私は100%CGPathCreateWithRectに精通していません、私は様々な状況で安全でないポインタをどのように処理するのかということを思い出しました。 – Knight0fDragon

+1

これはなぜ答えですか?私はマーティンRの方法を最初に使用することを好むだろう、彼は答えの完全な信用を得る必要があります、私はちょうど人々がその問題を遭遇する場合に、安全でない変更可能なポインタのための別の方法を指摘していた – Knight0fDragon

13

I've also tried passing &transform directly into CGPathCreateWithRect ...

あなたはほとんどいました。

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

詳細については、「ココアとObjective-Cでスイフトの使用」ドキュメントに"Interacting with C APIs" 参照:transform&とINOUT引数として渡すために、可変 する必要があります。


スウィフト3これは

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

や、アイデンティティのための変換になり、ちょうど

let path = CGPath(rect: rect, transform: nil) 
+0

この 'varはCGAffineTransformIdentity 変換=は'このエラーを生成します。CGAffineTransformIdentityは申し訳ありませんが、私は任意の助けになることはできませんスウィフト – Confused

+0

では使用できません。私はこれらの事によって謎に包まれている。それを超えて。 – Confused

+0

@Confused:更新を参照してください。 –

関連する問題