我正在使用以下方法来访问有关对象的数据。第一个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);
}
答案 0 :(得分:2)
CGRect存储为NSValue
您需要从CGRectValue
NSValue
使用以下
NSValue *value = [userInfo valueForKey:@"frame"];
CGRect rect = [value CGRectValue];
答案 1 :(得分:1)
如果我对userInfo类型的预测是正确的:
-(void) moveTheShape:(NSTimer*)timer
{
Shape *userInfo = [timer userInfo];
CGPoint origin = userInfo.frame.origin;
// Do stuff with origin
}
答案 2 :(得分:0)
int abscissa = frame.origin.x;会得到你的x值。您可以使用frame.size.width和frame.size.height来获取大小。
答案 3 :(得分:0)
abscissa
,我今天的新词!
无论如何,你的意思是CGRect,因为iPhone使用的是CoreGraphics,而不是所有UIKit矩形的FoundationKit。
至于访问struct的内部变量(CGPoint和CGSize是准确的),只需在将帧存储到CGRect var之后使用常规的旧点表示法,如下所示:
NSValue *value = [userInfo objectForKey:@"frame"];
CGRect frameVar = [value CGRectValue];
frameVar.origin = CGPointMake(someCoord, someOtherCoord);