(这个问题与我之前提出的问题相反,当我从RectangleF []转到NSArray时。请看这里:How to convert RectangleF[] into NSArray of CGRects?)
我有第三方库和绑定。
其中一个绑定是返回一个NSArray(注意:它是不一个“NSArray*
”,而是一个普通的“NSArray
”,因此返回RectangleF[]
而不是MonoTouch不支持NSArray
NSArray
。
我现在遇到的问题:如何将返回的NSRect
(我知道的RectangleF[]
)转换回for(uint i = 0; i < oHighlightAnnot.Rects.Count; ++i)
{
IntPtr ptrRect = oHighlightAnnot.Rects.ValueAt(i);
var oObj = new NSObject(ptrRect);
}
?
如果我循环通过NSArray:
NSRect
检查oObj,我可以在调试器中看到它是一个NSRect:
{NSRect:{{121.3672,265.76123},{192.09813,288}}}
但是呢? 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;
}
}
也未继承{{1}}。如何投射/转换回来?
以下是完成方法:
{{1}}
答案 0 :(得分:7)
已回复here,但仅供记录:
我的猜测是你看到一个NSRect包裹在NSValue中。
试试这个:
for(uint i = 0; i < oHighlightAnnot.Rects.Count; ++i)
{
IntPtr ptrRect = oHighlightAnnot.Rects.ValueAt(i);
var val = new NSValue(ptrRect);
var rect = val.RectangleFValue;
}