私はちょうどCABasicAnimation
for shadowPath プロパティを設定していましたが、これは私を興味深くしました:
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[注: shadowAnimation はCABasicAnimation
オブジェクトでnewShadowPath
あり、UIBezierPath
オブジェクトです]
これは機能し、Xcode にエラーや警告は表示されません。ただし、次のように書くと:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
これはコンパイルされず、次の警告メッセージがスローされます。
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
したがって、次のように入力する必要があります。
shadowAnimation.toValue = (__bridge id)test;
これはなぜですか?(id)newShadowPath.CGPathのみを使用すると、最初の例で同じエラーが発生しないのはなぜですか。? __bridge
Xcodeが問題を検出していなくても、そこにキャストを配置するのは正しいでしょうか? それとも、ここで何が違うのですか?