我确定我之前已经完成了但是我找不到如何:我在这里有一个需要NSArray
的绑定。内容为CGRect
个对象。
如何从NSArray
数组中获取CGRect
RectangleF[]
个?
我要转换的另一件事是:PointF[][]
成为`CGA的NSArray []
请注意,我实际上遇到了绑定问题:
/// Coordinates for highlight annotation (boxed CGRect's)
@property (nonatomic, strong) NSArray *rects;
/// Array of lines (which is a array of CGPoint's)
@property (nonatomic, copy) NSArray *lines;
这就是他们目前的情况:
[Export ("rects")]
NSArray Rects { get; set; }
[Export ("lines")]
NSArray Lines { get; set; }
这是无法编译的(在绑定项目中):
[Export ("rects")]
RectangleF[] Rects { get; set; }
[Export ("lines")]
PointF[][] Lines { get; set; }
修改/溶液
根据PouPou的建议,我提出了以下工作代码。 为了将PointF数组的数组转换为NSArray,我实现了这个方法。请注意,它的输入实际上是一个AnnotationPoint,但它被转换为PointF:
/// <summary>
/// Extends AnnotationPoint[][] to allow conversion into an NSArray containing arrays of CGPoint.
/// </summary>
/// <returns>the NSArray</returns>
/// <param name='aStrokePath'>the path to convert</param>
public static NSArray ToPSPDFInkLines(this AnnotationPoint[][] aStrokePath)
{
List<NSArray> aLines = new List<NSArray>();
foreach ( AnnotationPoint[] aLine in aStrokePath )
{
List<NSObject> aLinePoints = new List<NSObject>();
foreach (AnnotationPoint oPoint in aLine)
{
aLinePoints.Add(NSObject.FromObject(oPoint.ToPointF()));
}
var oNSLineArray = NSArray.FromNSObjects(aLinePoints.ToArray());
aLines.Add(oNSLineArray);
}
NSArray oNSArray = NSArray.FromNSObjects(aLines.ToArray());
return oNSArray;
}
要将RectangleF []转换为NSArray,这就是我的目的。请注意,在这里,我正在使用AnnotationRegion对象,但它们被转换为RectangleF:
NSObject[] aRects = oHighlightAnnot.Coords.Select(oRegion => NSObject.FromObject(oRegion.ToRectangleF())).ToArray();
NSArray oNSArray = NSArray.FromNSObjects(aRects);
答案 0 :(得分:5)
CoreGraphic的类型CGRect
映射到MonoTouch中的System.Drawing的RectangleF
。在编写绑定时,当您看到前者(在ObjectiveC中)时,您可以编写后者(在C#中)。
编辑但是绑定生成器无法将NSArray
转换为非NSObject
数组(例如RectangleF
等值类型)。在这种情况下,您可以将它们绑定为NSArray
并使用[Internal]
标记它们,然后为公共消费提供更好的(手动)重载。
然后,您可以根据Rectangle[]
的大小创建自己的NSArray
,然后迭代NSArray
元素以获取元素。您需要将每个元素转换(请参阅NSObject
和NSValue
帮助者)到RectangleF
。
当你不知道你会得到什么类型时,需要保留NSArray
。