6

私は以前にそれをしたと確信していますが、方法がわかりません:ここに。を期待するバインディングがありNSArrayます。内容はCGRectオブジェクトです。

の配列からのを取得するNSArrayにはどうすればよいですか?CGRectRectangleF[]

私が変換しなければならないもう1つのことは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のタイプは、MonoTouchCGRectのSystem.Drawingにマップされます。RectangleFバインディングを作成するときは、前者(ObjectiveC)が表示されたときに、後者(C#)を作成します。

編集ただし、バインディングジェネレータNSArrayは非-の配列に変換できませんNSObject(たとえば、のような値型RectangleF)。そのような場合、あなたはそれらをとしてバインドし、それらNSArrayにマークを付けて[Internal]、公共の消費のためにより良い(手動の)過負荷を提供することができます。

Rectangle[]次に、のサイズに基づいて独自のを作成し、要素をNSArray反復してNSArray要素を取得できます。各要素をに変換する必要があります(NSObjectおよびNSValueヘルパーを参照)RectangleF

また、どのタイプを取得するかわからない場合は、保持する必要があります。NSArray

于 2012-12-04T13:08:11.750 に答える