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 类型的列表的主要内容,如果未能解决你的问题,请参考以下文章