如何将RectangleF []转换为CGRects的NSArray?

Kru*_*lur 6 c# core-graphics xamarin.ios

我确定我之前已经完成了但是我没有找到如何:我在这里有一个预期的绑定NSArray.内容是CGRect对象.

我如何得到一个NSArrayCGRect从数组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;
Run Code Online (Sandbox Code Playgroud)

这就是他们目前的情况:

[Export ("rects")]
NSArray Rects { get; set; }

[Export ("lines")]
NSArray Lines { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是不会编译的(在绑定项目中):

[Export ("rects")]
RectangleF[] Rects { get; set; }

[Export ("lines")]
PointF[][] Lines { get; set; }
Run Code Online (Sandbox Code Playgroud)

编辑/解决方案:

根据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;
}
Run Code Online (Sandbox Code Playgroud)

要将RectangleF []转换为NSArray,我就是这样做的.请注意,在这里,我正在使用AnnotationRegion对象,但它们被转换为RectangleF:

NSObject[] aRects = oHighlightAnnot.Coords.Select(oRegion => NSObject.FromObject(oRegion.ToRectangleF())).ToArray();
NSArray oNSArray = NSArray.FromNSObjects(aRects);
Run Code Online (Sandbox Code Playgroud)

pou*_*pou 5

CoreGraphic的类型CGRect映射到RectangleFMonoTouch中的System.Drawing .在编写绑定时,当您看到前者(在ObjectiveC中)时,您可以编写后者(在C#中).

编辑然而,绑定生成器无法转换NSArray为非数组NSObject(例如,值类型RectangleF).在这种情况下,您可以将它们绑定NSArray并标记它们,[Internal]然后为公共消费提供更好的(手动)重载.

然后,您可以Rectangle[]根据其大小创建自己的NSArray,然后迭代NSArray元素以获取元素.您需要将每个元素转换(查看NSObjectNSValue帮助)到a RectangleF.

当你不知道你会得到什么类型时,你需要保持NSArray.