我确定我以前做过,但我不知道怎么做:我这里有一个绑定,需要一个NSArray
. 内容是CGRect
对象。
如何从数组中获取NSArray
of ?CGRect
RectangleF[]
我必须转换的另一件事是:PointF[][]
转换为 CGPoint[] 的 `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);