0

我想为鹅卵石表盘创建 11 个文本图层。如果没有循环,代码看起来会像这样。

static TextLayer *time_layer_a;
static TextLayer *time_layer_b; 

... 等等。

如何使用循环执行此操作并将指向对象的指针放在类似结构的列表中?

list:在这种情况下,数组或链会是一个更好的词,因为指针集合用于具有固定数量的文本层的显示。并且层数在程序期间不会改变。在 C 中,列表是一种可以动态调整大小的结构。使用“类似列表”可能会使有帮助的人误以为所寻求的链接方法应该是动态的。这是不正确的。首选使用固定内存分配的结构。

编辑:John3136 建议的数组完美运行。该数组还有一个额外的好处,就是通过它的减速来生成对象指针。John3136 提供了一种让代码自动调整到数组大小的方法,这是一个加分项。这是一个有用的工具。

这是用于为我的表盘创建文本层的代码。

声明:

int i;
static TextLayer* layers[11];

加载方法:

// by John3136
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < (short)(sizeof(layers) / sizeof(layers[0])); i++) // (short) converts unsigned interger to +- int
{
  layers[i] = text_layer_create(GRect((bounds.size.w/4)*((i + 1)%4), 
                                      (bounds.size.h/PBL_IF_ROUND_ELSE(5,4))*((i > 2) 
                                                                              ? ((i > 6) 
                                                                                 ? 3 
                                                                                 : 2 ) 
                                                                              : 1), 
                                      (bounds.size.w / 4) ,(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))));
}

卸货方式:

for(i = 0; i < (short)(sizeof(layers) / sizeof(layers[0])); i++) 
{
  text_layer_destroy(layers[i]); 
}
4

1 回答 1

3

据我们所知,满足您要求的最简单方法:一个包含 11 个指向 TextLayers 的指针的数组。

static TextLayer*  layers[11];

然后,您可以填充:

int i;
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < sizeof(layers) / sizeof(layers[0]); i++)
{
    layers[i] = some_func_that_creates_a_layer();
}
于 2016-08-04T02:13:08.003 回答