从数组中获取CGRect

aja*_*jay 11 objective-c nsarray ios cgrect

对于我的应用程序,我试图将CGRect对象存储到NSMutableArray.它正在加载并在日志语句中打印,但尝试CGRect从数组中取出s会显示错误.这是一段代码:

CGRect lineRact = CGRectMake([[attributeDict objectForKey:@"x"] floatValue], 
  [[attributeDict objectForKey:@"y"] floatValue], 
  [[attributeDict objectForKey:@"width"] floatValue], 
  [[attributeDict objectForKey:@"height"] floatValue]);

  [lineRactangle addObject:NSStringFromCGRect(lineRact)];
Run Code Online (Sandbox Code Playgroud)

如何从阵列中取回rects?

Dar*_*ust 41

CGRect是结构,而不是对象,因此不能存储在NSArrays或NSDictionaries中.您可以将其转换为字符串并将该字符串转换回CGRect,但最好的方法是通过NSValue封装它:

NSValue *myValue = [NSValue valueWithCGRect:myCGRect];
Run Code Online (Sandbox Code Playgroud)

然后,您可以将此NSValue对象存储在数组和字典中.要将其重新转换为CGRect,您需要执行以下操作:

CGRect myOtherCGRect = [myValue CGRectValue];
Run Code Online (Sandbox Code Playgroud)


Kir*_*odd 22

[lineRactangle addObject:[NSValue valueWithCGRect:lineRect]];
Run Code Online (Sandbox Code Playgroud)


fre*_*ace 7

使用NSValueCGRect从而将它们存储在NSArray秒.

例如:

CGRect r = CGRectMake(1,2,3,4);
NSValue *v = [NSValue valueWithCGRect:rect];
NSArray *a = [NSArray arrayWithObject:v];
CGRect r2 = [[a lastObject] CGRectValue];
Run Code Online (Sandbox Code Playgroud)

请参阅其他支持的结构的文档.