CABasicAnimation.fromValue
では
CGPoint
を「クラス」に変換したいので、
NSValue
valueWithPoint
を使用しましたが、デバイスモードまたはシミュレータでは動作しません... はデバイスまたはシミュレータの場合は
NSMakePoint
または
CGPointMake
を使用する必要があります。
CABasicAnimation.fromValue
では
CGPoint
を「クラス」に変換したいので、
NSValue
valueWithPoint
を使用しましたが、デバイスモードまたはシミュレータでは動作しません... はデバイスまたはシミュレータの場合は
NSMakePoint
または
CGPointMake
を使用する必要があります。
+ (NSValue *)valueWithCGPoint:(CGPoint)point
NSValueはNSPointのようなプリミティブな構造体を保持するラッパークラスです。とにかく、ここに必要な機能があります。それはココアの一部ですが、ココアタッチはありません。プロジェクト全体に関数を追加したり、必要に応じて同じ変換を行うことができます。
NSPoint NSPointFromCGPoint(CGPoint cgpoint) {
return (*(NSPoint *)&(cgpoint));
}
返信に使用する構文を教えてください。役に立つと思う。 – Dimitris
その文法は**間違っている**なので、関数は何でも...(説明されていません)、_useless_です。 –
構文は正しいですが、キャストは役に立たず、* CGPoint *と* NSPoint *は同じ型です(* NSPoint *はtypedefを* CGPoint *にします)。 –
&を参照してください関数を定義NSValue
にUIKit
ほかは(するCGPoint)があります - > (NSPoint *)をするCGPointへの参照(アドレス)を取得&(cgpoint) - > NSPointポインタへの参照をキャストする *(NSPoint ) (cgpoint) - > NSPointポインタが戻り値の型を幸せにするためにNSPointポインタを返すことを逆参照します。
@ashcatchの答えは非常に役に立ちますが、ネイティブのNSValue
メソッドがポインタを格納するときに、ここに私のコードは、それをチェックすることです:
CGPoint point = CGPointMake(2, 4);
NSValue *val = [NSValue valueWithCGPoint:point];
point.x = 10;
CGPoint newPoint = [val CGPointValue];
ここ
newPoint.x = 2; point.x = 10
CGPoint point = CGPointMake(2, 4);
NSValue *val = [NSValue valueWithPointer:&point];
point.x = 10;
CGPoint *newPoint = [val pointerValue];
ここ
newPoint.x = 10; point.x = 10
しかし、この例では、ヒープ上のメモリ位置へのポインタを格納するので、2番目のアプローチに注意してください。したがって、ポイント宣言のスコープを離れた後に、作成されたNSValueオブジェクト(またはその中に格納されているポインタ)を使用すると、アプリケーションがクラッシュする可能性があります。 – ashcatch
静的メソッドが初期化子方式に変更されます。
var pointValue = CGPointMake(10,10)
NSValue(CGPoint: pointValue)
Swiftでは、次のような値を変更することができます。
var pointValueare = CGPointMake(30,30)
NSValue(CGPoint: pointValueare)
ありがとう、非常に便利ですが、これらのメソッドは値をコピーすると考えてください。私の答えをチェックアウトする。 – DanSkeel