0

我正在尝试从每个条目都是 NSPoint 的 NSArray 创建一个 CGPoint 数组

 NSArray *points = [_terrain getPathPoints];
 CCLOG(@"Terrain Points=%@",points);

日志中的输出:

Terrain Points=(
    "NSPoint: {-3.4324746, 70.220947}",
    "NSPoint: {-3.9852712, 70.136444}",
    "NSPoint: {-4.3119373, 70.058411}",
    "NSPoint: {-4.4321384, 69.986282}",
    "NSPoint: {-4.3655362, 69.919479}",
    "NSPoint: {-4.131794, 69.857513}",
    "NSPoint: {-3.7505748, 69.799774}"
)

getPathPoints 是我正在使用的第三方工具的一种方法。此方法返回一个 NSPoint 数组。如何从上述数据创建 CGPoint 数组?

4

2 回答 2

2

您所看到的最有可能NSValue是从CGPoint结构创建的对象(您不能将 aCGPointNSPoint直接放入 a NSArray)。他们记录 as 的事实NSPoint可能有点令人困惑(Mac 的痕迹,NSPoint本质上与 相同),但您可以使用该方法CGPoint轻松地将这样的“装箱”值转换回 a ,例如CGPointCGPointValue

NSArray *points = [_terrain getPathPoints];
NSValue *lastPointValue = [points lastObject];
CGPoint lastPoint = [lastPointValue CGPointValue];
//...
于 2013-07-23T00:57:52.140 回答
1

你读过文档吗?

图形类型转换

在 Cocoa 和 Quartz 代码之间来回切换时,可能需要进行一些数据类型的转换。表 9-1 显示了一些基本 Quartz 类型的 Cocoa 等价物。

Table 9-1  Simple data-type conversions
    Cocoa type       Quartz type
      NSRect           CGRect
      NSPoint          CGPoint
      NSSize           CGSize

尽管在每种情况下结构布局都是相同的,但您不能将 Quartz 数据类型直接传递给需要 Cocoa 类型的方法。要进行转换,您必须从一种类型转换为另一种类型,如以下示例所示:

NSRect cocoaRect = *(NSRect*)&myCGRect;
于 2013-07-23T00:50:49.903 回答