gpt4 book ai didi

c# - 如何在 MonoTouch 中将 NSRect/CGRect 转换回 RectangleF?

转载 作者:太空狗 更新时间:2023-10-30 00:42:46 25 4
gpt4 key购买 nike

(当从 RectangleF[] 到 NSArray 时,这个问题与我之前问的相反。参见此处:How to convert RectangleF[] into NSArray of CGRects?)

我有一个第 3 方库和绑定(bind)。其中一个绑定(bind)返回一个 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;
}
}

最佳答案

已回答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;
}

关于c# - 如何在 MonoTouch 中将 NSRect/CGRect 转换回 RectangleF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com