(この質問は、RectangleF[] から NSArray に移動するときに、以前に尋ねたのとは逆の場合です。ここを参照してください: RectangleF[] を CGRects の NSArray に変換する方法? )
サードパーティのライブラリとバインディングがあります。バインディングの 1 つはNSArrayを返します(注: これは" NSArray*
" ではなくプレーンな " NSArray
" です) 。私が今抱えている問題: 返された(の、私が知っている) を に戻す方法は?RectangleF[]
NSArray
NSArray
NSRect
RectangleF[]
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
ていません。キャスト/変換する方法は?RectangleF
NSObject
完了方法は次のとおりです。
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;
}
}