【发布时间】:2012-11-27 17:14:58
【问题描述】:
(这个问题与我之前问的相反,从 RectangleF[] 到 NSArray 时。请参见此处:How to convert RectangleF[] into NSArray of CGRects?)
我有一个第 3 方库和它的绑定。
其中一个绑定是返回一个 NSArray(注意:它不是一个“NSArray*”而是一个普通的“NSArray”),因此返回 RectangleF[] 而不是 NSArray 不起作用/由 MonoTouch 支持。
我现在遇到的问题:如何将返回的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;
}
}
【问题讨论】:
标签: c# xamarin.ios