0

押すたびにランダムに画面に表示したいボタンがあります。これを実現するためにarc4randomを使用しています。しかし、このメソッドにカウンターを組み込むと、ランダム部分が機能しなくなります。なぜこれが起こっているのか、またはそれを修正する方法についてのアイデアは大歓迎です。事前に感謝します! 私のコードは以下です。

-(IBAction)random:(id)sender{

    int xValue = arc4random() % 320;
    int yValue = arc4random() % 480;

    button.center = CGPointMake(xValue, yValue);

    counter = counter + 1;
    score.text = [NSString stringWithFormat:@"Score: %i", counter];


}
4

1 に答える 1

1

問題を明らかにしているのは実際にはカウンターではなく、ラベルの値の設定です。これは自動レイアウトの問題であり、ラベルの値を設定すると、ビューのレイアウトが強制され、自動レイアウト機能によってボタンが元の位置に戻ります。最も簡単な修正は、自動レイアウトをオフにすることです。これは、IBのファイルインスペクター(最も左にあるもの)から実行されます。[自動レイアウトを使用する]チェックボックスをオフにするだけです。

何が起こっているかを確認するには速すぎますが、コードをこれに変更すると(自動レイアウトがオンのまま)、ボタンが移動してから元に戻ります。

-(IBAction)random:(id)sender{
    int xValue = arc4random() % 320;
    int yValue = arc4random() % 480;
    button.center = CGPointMake(xValue, yValue);
    counter = counter + 1;
    [self performSelector:@selector(fillLabel) withObject:nil afterDelay:.5];

}

-(void)fillLabel {
    score.text = [NSString stringWithFormat:@"Score: %i", counter];
}

レイアウト制約を使用する場合のもう1つの方法は、レイアウト制約の「定数」パラメーターを変更することです。以下の例では、ボタンをスーパービューに対して左右の制約があるような場所(IB内)に配置しました。私はそれらの制約にIBOutletsを作成し、それらを接続しました。これはコードです:

@implementation ViewController {
    IBOutlet UILabel *score;
    int counter;
    NSLayoutConstraint IBOutlet *leftCon;
    NSLayoutConstraint IBOutlet *topCon;
}

-(IBAction)random:(id)sender{
    int xValue = arc4random() % 300;
    int yValue = arc4random() % 440;
    leftCon.constant = xValue;
    topCon.constant = yValue;
    counter = counter + 1;
    score.text = [NSString stringWithFormat:@"Score: %i", counter];
}
于 2013-01-28T07:22:41.880 に答える