6

我确定我以前做过,但我不知道怎么做:我这里有一个绑定,需要一个NSArray. 内容是CGRect对象。

如何从数组中获取NSArrayof ?CGRectRectangleF[]

我必须转换的另一件事是: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);
4

1 回答 1

5

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

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

然后你可以创建你自己的Rectangle[],根据 的大小NSArray,然后迭代NSArray元素来获取元素。您需要将每个元素转换(参见NSObjectNSValue助手)为RectangleF.

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

于 2012-12-04T13:08:11.750 回答