gpt4 book ai didi

c# - 如何将 RectangleF[] 转换为 CGRects 的 NSArray?

转载 作者:太空狗 更新时间:2023-10-29 21:40:23 26 4
gpt4 key购买 nike

我确定我以前做过,但我不知道如何做:我这里有一个需要 NSArray 的绑定(bind)。内容是 CGRect 对象。

如何从 RectangleF[] 数组中获取 CGRectNSArray

我必须转换的另一件事是:PointF[][] 到 CGPoint[] 的 `NSArray

请注意,我实际上在这里遇到了绑定(bind)问题:

/// Coordinates for highlight annotation (boxed CGRect's)
@property (nonatomic, strong) NSArray *rects;

/// Array of lines (which is a array of CGPoint's)
@property (nonatomic, copy) NSArray *lines;

这是他们目前的样子:

[Export ("rects")]
NSArray Rects { get; set; }

[Export ("lines")]
NSArray Lines { get; set; }

这是无法编译的(在绑定(bind)项目中):

[Export ("rects")]
RectangleF[] Rects { get; set; }

[Export ("lines")]
PointF[][] Lines { get; set; }

编辑/解决方案:

按照 PouPou 的建议,我想出了以下工作代码。为了将 PointF 数组的数组转换为 NSArray,我实现了这个方法。请注意,它的输入实际上是一个 AnnotationPoint,但它被转换为 PointF:

/// <summary>
/// Extends AnnotationPoint[][] to allow conversion into an NSArray containing arrays of CGPoint.
/// </summary>
/// <returns>the NSArray</returns>
/// <param name='aStrokePath'>the path to convert</param>
public static NSArray ToPSPDFInkLines(this AnnotationPoint[][] aStrokePath)
{
List<NSArray> aLines = new List<NSArray>();
foreach ( AnnotationPoint[] aLine in aStrokePath )
{
List<NSObject> aLinePoints = new List<NSObject>();
foreach (AnnotationPoint oPoint in aLine)
{
aLinePoints.Add(NSObject.FromObject(oPoint.ToPointF()));
}
var oNSLineArray = NSArray.FromNSObjects(aLinePoints.ToArray());
aLines.Add(oNSLineArray);
}
NSArray oNSArray = NSArray.FromNSObjects(aLines.ToArray());
return oNSArray;
}

要将 RectangleF[] 转换为 NSArray,这就是我的目的。请注意,在这里,我使用的是 AnnotationRegion 对象,但它们被转换为 RectangleF:

NSObject[] aRects = oHighlightAnnot.Coords.Select(oRegion => NSObject.FromObject(oRegion.ToRectangleF())).ToArray();
NSArray oNSArray = NSArray.FromNSObjects(aRects);

最佳答案

CoreGraphic 的类型CGRect 在 MonoTouch 中映射到 System.Drawing 的 RectangleF。编写绑定(bind)时,当您看到前者(在 ObjectiveC 中)时,您会编写后者(在 C# 中)。

编辑 但是绑定(bind)生成器无法将NSArray 转换为非NSObject 数组(例如RectangleF 这样的值类型>).在这种情况下,您可以将它们绑定(bind)为 NSArray 并用 [Internal] 标记它们,然后为公共(public)消费提供更好的(手动)重载。

然后你可以根据NSArray的大小创建你自己的Rectangle[],然后迭代NSArray元素得到元素。您需要将每个元素转换(参见 NSObjectNSValue 帮助程序)到 RectangleF

此外,当您不知道会得到什么类型时,您需要保留NSArray

关于c# - 如何将 RectangleF[] 转换为 CGRects 的 NSArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13702264/

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