4

(この質問は、RectangleF[] から NSArray に移動するときに、以前に尋ねたのとは逆の場合です。ここを参照してください: RectangleF[] を CGRects の NSArray に変換する方法? )

サードパーティのライブラリとバインディングがあります。バインディングの 1 つはNSArrayを返します(注: これは" NSArray*" ではなくプレーンな " NSArray" です) 。私が今抱えている問題: 返された(の、私が知っている) を に戻す方法は?RectangleF[]NSArrayNSArrayNSRectRectangleF[]

NSArray をループすると、次のようになります。

for(uint i = 0; i < oHighlightAnnot.Rects.Count; ++i)
{
  IntPtr ptrRect = oHighlightAnnot.Rects.ValueAt(i);
  var oObj = new NSObject(ptrRect);
}

oObj を調べると、デバッガーでそれが NSRect であることがわかります。

{NSRect: {{121.3672, 265.76123}, {192.09813, 288}}}

しかし、その後は?NSRectは公開されておらず、継承も継承もされCGRectていません。キャスト/変換する方法は?RectangleFNSObject

完了方法は次のとおりです。

public virtual NSArray Rects
{
    [Export ("rects")]
    get
    {
        NSArray nSArray;
        if (this.IsDirectBinding)
        {
            nSArray = (NSArray)Runtime.GetNSObject (Messaging.IntPtr_objc_msgSend (base.get_Handle (), PSPDFHighlightAnnotation.selRects));
        }
        else
        {
            nSArray = (NSArray)Runtime.GetNSObject (Messaging.IntPtr_objc_msgSendSuper (base.get_SuperHandle (), PSPDFHighlightAnnotation.selRects));
        }
        base.MarkDirty ();
        this.__mt_Rects_var = nSArray;
        return nSArray;
    }
    [Export ("setRects:")]
    set
    {
        if (this.IsDirectBinding)
        {
            Messaging.void_objc_msgSend_IntPtr (base.get_Handle (), PSPDFHighlightAnnotation.selSetRects_, (value != null) ? value.get_Handle () : IntPtr.Zero);
        }
        else
        {
            Messaging.void_objc_msgSendSuper_IntPtr (base.get_SuperHandle (), PSPDFHighlightAnnotation.selSetRects_, (value != null) ? value.get_Handle () : IntPtr.Zero);
        }
        base.MarkDirty ();
        this.__mt_Rects_var = value;
    }
}
4

1 に答える 1

7

これはここで回答されていますが、記録のために:

私の推測では、NSValue にラップされた NSRect が表示されています。

これを試して:

for(uint i = 0; i < oHighlightAnnot.Rects.Count; ++i)
{
    IntPtr ptrRect = oHighlightAnnot.Rects.ValueAt(i);
    var val = new NSValue(ptrRect);
    var rect = val.RectangleFValue;
}
于 2012-12-10T14:08:31.023 に答える