0

次のメソッドを使用して、オブジェクトに関するデータにアクセスしています。最初の NSLog には、すべてのデータが表示されます。2 番目の NSLog は、次のような「フレーム」データを示しています: NSRect: {{168, 102}, {5, 5}}

NSRect から最初の座標セットにアクセスし、次に最初のペアから横座標にアクセスするにはどうすればよいですか?

-(void) moveTheShape:(NSTimer*)timer
{
    NSDictionary *userInfo = [timer userInfo];
    NSLog(@"Info:  %@",userInfo);
    //Info:  <Shape: 0x68b6c30; frame = (151 352; 5 5); layer = <CALayer: 0x68b6c00>>
    NSDictionary *frame = [userInfo  valueForKey:@"frame"];
    NSLog(@"frame: %@", frame);
    //NSRect: {{168, 102}, {5, 5}}
}

正しい解決策:

-(void) moveTheShape:(NSTimer*)timer
{
Shape *userInfo = [timer userInfo];
NSLog(@"Info:  %@",userInfo);
CGPoint origin = userInfo.frame.origin;
NSLog(@"result: %f", origin.x);
}
4

4 に答える 4

2

CGRect は NSValue として保存されますCGRectValueNSValue

以下を使用

NSValue *value = [userInfo valueForKey:@"frame"];
CGRect rect = [value CGRectValue];
于 2012-06-08T15:27:38.227 に答える
1

userInfo のタイプに関する私の推測が正しい場合:

-(void) moveTheShape:(NSTimer*)timer
{
    Shape *userInfo = [timer userInfo];
    CGPoint origin = userInfo.frame.origin;
    // Do stuff with origin
}
于 2012-06-08T16:05:23.840 に答える
0

int 横座標 = frame.origin.x; x 値を取得します。サイズを取得するには、frame.size.width と frame.size.height を使用します。

于 2012-06-08T15:24:53.237 に答える
0

はあ、abscissa今日の新しい言葉!

とにかく、iPhone はすべての UIKit 長方形に対して FoundationKit ではなく CoreGraphics を使用するため、CGRect を意味しますか。

構造体の内部変数 (正確には CGPoint と CGSize) へのアクセスに関しては、次のようにフレームを CGRect 変数に格納した後、通常の古いドット表記を使用するだけです。

NSValue *value = [userInfo objectForKey:@"frame"];
CGRect frameVar = [value CGRectValue];
frameVar.origin = CGPointMake(someCoord, someOtherCoord);
于 2012-06-08T15:28:28.173 に答える