0

小石のウォッチフェイス用に 11 のテキストレイヤーを作成したいと思います。ループがなければ、コードは次のようになります。

static TextLayer *time_layer_a;
static TextLayer *time_layer_b; 

... 等々。

ループでこれを行うにはどうすればよいですか?オブジェクトへのポインタを構造のようなリストに配置しますか?

list : この場合、ポインターのコレクションは固定数のテキスト レイヤーを使用した表示用であるため、配列またはチェーンの方が適しています。また、プログラムの実行中にレイヤーの数が変更されることはありません。C では、リストは動的にサイズ変更できる構造体です。「list like」を使用すると、求められているチェーンの方法が動的であることが期待されるという仮定に、有益な人々を誤解させる可能性があります。これは正しくありません。メモリの固定割り当てを使用する構造が推奨されます。

編集: 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

私たちが知っている要件を満たす最も簡単な方法は、TextLayers への 11 個のポインターの配列です。

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 に答える