0

私はObjective-cを学んでいるだけなので、私の問題は単純なものかもしれません。プレーヤーのスコアを追跡するために使用されるラベルを持つ単純なゲームを作成しています。ゲームプレイは正常に機能し、スコアの計算に問題はありません。この問題は、ラベルのtextプロパティをスコア変数に格納されている値に設定すると発生します。

score += (int)someFloatValue;
NSString *scoreText = [NSString stringWithFormat:@"%i", score];
scoreLabel.text = scoreText;

私のゲームループでは、常にこのテキストを設定しています。そのため、スコアがゼロを超える前でも、テキストを常にゼロの値に設定しています。これまでのところ問題はありません。プレーヤーがポイントを獲得するとすぐに、スコア変数の値が変更されます。それでも問題ありません。しかし、ラベルのテキストを新しいスコアで更新すると、すべてのUI要素の場所が、InterfaceBuilderで最初に設定された場所にリセットされます。クラッシュはありません。そして、スコアはラベルに正しく表示されます。すべてのUI要素が移動します。

これが役立つかどうかはわかりませんが、すべて正しく設定したと思います。

hファイル:

@interface ViewController : UIViewController{
    UILabel *scoreLabel;
    NSInteger score;
}

@property (nonatomic, retain) IBOutlet UILabel *scoreLabel;
@property (nonatomic) NSInteger score;

mファイル:

@interface ViewController ()

@end

@synthesize scoreLabel;
@synthesize score;
4

1 に答える 1

2

コード内でUI要素を移動し、IBで制約を設定しない場合は、必ず自動レイアウトをオフにしてください。

Interface Builderで自動レイアウト(制約)を削除します

また、このコードを次のように単純化することもできます(ただし、そのままでも問題ありません)。

scoreLabel.text = [NSString stringWithFormat:@"%i", score];
于 2013-02-09T01:13:09.417 に答える