0

我正在使用以下方法来访问有关对象的数据。第一个 NSLog 显示所有数据。第二个 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我今天的新词!

无论如何,您的意思是 CGRect,因为 iPhone 使用 CoreGraphics,而不是 FoundationKit 用于所有 UIKit 矩形。

至于访问结构的内部变量(准确地说是 CGPoint 和 CGSize),只需在将帧存储到 CGRect 变量后使用常规的旧点表示法,如下所示:

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