小石の時計の面に11のテキストレイヤーを作成したいと思います。 ループがなければ、コードは次のようになります。C:ポインターの配列で固定数のオブジェクトを生成する方法
static TextLayer *time_layer_a;
static TextLayer *time_layer_b;
...など。
ループでこれを実行し、リストのオブジェクトへのポインタを配置する方法のような構造ですか?
リスト:ポインターのコレクションが固定数のテキストレイヤーを持つディスプレイ用であるため、この場合、配列またはチェーンがより良い単語になります。また、プログラムの期間中はレイヤの数は変更されません。 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]);
}
。明らかにいくつかのコードがありますので、[mcve]を入力してください。また[尋ね]を学び、必要な情報を提供してください。 – Olaf
この質問を完全でコンパイル可能な例にすることは、不必要な混乱を追加するだけです。私はこの質問はそれだけでいいと思う。 – hugomg
@Olaf、私はCで私の最初のプログラムを書いています。私はまだC言語の構造体やそれに最も適したものをすべて知っていません。私は "リストのようなもの"を探していることを知っていました。私ができる最高の時に。配列がうまくいくことがわかっていれば、配列を要求していたでしょう。 – kjl