MonoTouch - 如何有效地创建包含所有CGColor类型的List

时间:2012-12-02 14:23:23

标签: list loops xamarin.ios add cgcolor

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

这是我到目前为止的方法:

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

我现在很容易从列表中随机选择其中一种颜色,但我正在寻找一种有效的方法,可以将CGColor的所有不同选项添加到此列表中,而无需使用{{1每一次。

如何在循环中浏览每个可能的选项(蓝色,橙色,绿色,紫色等...)以将这些选项添加到我的列表中?

谢谢!

1 个答案:

答案 0 :(得分:2)

这取决于高效的含义。如果您希望快速,请继续使用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值数组。