2009-05-22 14 views
128

「パス」のようなものを記述する約50のCGPointオブジェクトがあり、それらをNSArrayに追加したいとします。これは、指定されたインデックスに対して対応するCGPointを返すメソッドです。私はp1 = ...のような50の変数を作成したくありません。 p2 = ...などとなります。オブジェクトを使ってNSArrayを初期化するときに、これらの点を「即座に」定義できるようにする簡単な方法はありますか? UIKitCGPointオブジェクトを簡単にNSArrayに追加するにはどうすればよいですか?

答えて

317

あなたが行うことができるようにAppleは、NSValueにするCGPointのサポートを追加しました:

NSArray *points = [NSArray arrayWithObjects: 
        [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)], 
        [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)], 
        nil]; 

リストの多くの[NSValue]インスタンスとしてあなたがするCGPointを持って、そしてゼロでリストを終了として。この構造のオブジェクトはすべて自動リリースされます。フリップ側では

、あなたは、配列から値を引っ張っている:

NSValue *val = [points objectAtIndex:0]; 
CGPoint p = [val CGPointValue]; 
+0

クール。どのようにスカラー型のどのような種類の作品ですか? – Thanks

+2

スカラー型の場合は、NSNumberを見てください。numberWithBool:numberWithInteger:numberWithFloat :, numberWithUnsignedShort:などのコンストラクタが表示されます。 –

+4

NSValueを直接使用することもできます。[NSValue valueWithBytes:&someStructSockaddr objCType:@encode sockaddr)]などです。 –

2

あなたはCFMutableArrayを見て撮影したことがありますか?それはあなたのためにうまくいくかもしれません。

7

私はこれを使用します。

は、配列を作成します。

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]]; 

は、第一するCGPointオブジェクトを取得します。

CGPoint myPoint = [myArray[0] CGPointValue]; 
2

ます。また、標準のC/C++の方法でこれを書くことができます。

CGPoint oldschool[] = { CGPointMake(5.5, 6.6), 
         CGPointMake(7.7, 8.8) }; 

CGPoint p2 = oldschool[1]; 
関連する問題