MonoTouch - 如何有效地创建具有所有 CGColor 类型的列表

Posted

技术标签:

【中文标题】MonoTouch - 如何有效地创建具有所有 CGColor 类型的列表【英文标题】:MonoTouch - how do I create a List with all the CGColor types efficiently 【发布时间】:2012-12-02 14:23:22 【问题描述】:

我正在寻找一种使用MonoTouch 创建CGColors 列表的有效方法。

这是我目前所拥有的一种方法:

List<CGColor> colourList = new List<CGColor>();
colourList.Add(UIColor.Blue.CGColor);
colourList.Add(UIColor.Brown.CGColor);
colourList.Add(UIColor.Cyan.CGColor);

现在我很容易从列表中随机选择其中一种颜色,但我正在寻找一种有效的方法来将 CGColor 的所有不同选项添加到此列表中,而无需每次都使用 colourList.Add() .

如何在循环中遍历每个可能的选项(蓝色、橙色、绿色、紫色等...)以将它们添加到我的列表中?

谢谢!

【问题讨论】:

【参考方案1】:

这取决于您所说的高效。如果您希望它快速继续使用Add 并建立您自己的列表。

您可以使用 C# 3 功能删除一些源代码,例如

List<CGColor> colourList = new List<CGColor> () 
    UIColor.Blue.CGColor,
    UIColor.Brown.CGColor,
    UIColor.Cyan.CGColor, ...
;

这看起来更好(恕我直言),并且执行起来也一样快,因为一旦编译到 IL 中,它将是相同的。

您还可以使用System.Reflection 查找UIColor 的所有静态属性(返回CGColor)并将它们添加到列表中。这样做的好处是,在未来版本的 ios 中添加的任何新颜色都将在不更改源代码的情况下添加。但是执行(创建列表)会慢一些。此外,托管链接器在启用时可能会删除一些颜色(因为应用程序不会看到它们)。

最后,如果您想要随机颜色,那么您可以只保留 RGBA 值并根据它们重新创建 CGColor。 Take 会占用更少的内存,并允许您使用预定义的 RGBA 值数组。

【讨论】:

谢谢 poupou,我应该通过高效来澄清,我想我的意思是编写代码的方式更简洁,如果可能的话,速度更快。现在我将简单地采用您简化源代码的方式,并且我也简要研究了反射 - 我能够使用它提取所有 UIColor 静态属性的列表,所以我将来可能会使用它 - 它应该对我的应用程序来说足够快:) - 我还考虑过使用随机 RGBA 值 - 应该足够简单,可以使用 0 到 255 之间的整数来实现这一点 - 也许是另一种方法!

以上是关于MonoTouch - 如何有效地创建具有所有 CGColor 类型的列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有霓虹内在函数的多核处理器中有效地使用所有霓虹灯单元

如何根据关键和时间间隔有效地查找父记录?

如何有效地将具有一定周期性的列表拆分为多个列表?

在 python 中有效地为 NetworkX 创建边

如何有效地输出具有相同内容的文件列表?

UITextField 中的 C# Monotouch 电话号码格式