0

私の目標は、ボタンを押すたびにランダムな場所に移動するボタンを作成することでした。私はこれをこのアクションで動作させることができました:

- (IBAction)move:(id)sender 
{
   int x = 0 + arc4random() % (260 - 0);
   int y = 0 + arc4random() % (400 - 0);

   frame = self.button.frame;
   frame.origin.x = x; // new x coordinate
   frame.origin.y = y; // new y coordinate
   self.button.frame = frame;
}

ただし、次のボタンでトリガーされるタイマーを追加してみました。

- (IBAction)start:(id)sender 
{
   timer =[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
   self.startButton.Hidden = YES;
   self.label.hidden = NO; 
}

- (void)showActivity
{

   int currentTime = [self.label.text intValue];
   int newTime = currentTime - 1;
   self.label.text = [NSString stringWithFormat:@"%d", newTime];

   if (newTime == 0)
   {
       [timer invalidate];
   }
}

タイマーが作動するたびに、ビューが再描画されるようです。タイマーを開始する前に、ボタンをうまく動かすことができます。次に、タイマーを開始する2番目のボタンを押すと、最初のボタンは、xibファイルで最初に配置した場所にルートされます。これを修正する方法はありますか?

4

2 に答える 2

0

これはどう...

- (void)repositionViewRandomly:(UIView *)view {

    CGFloat width = view.bounds.size.width;
    CGFloat height = view.bounds.size.height;

    int x = arc4random() % (int)(view.superview.bounds.size.width - width);
    int y = arc4random() % (int)(view.superview.bounds.size.height - height);

    [UIView animateWithDuration:0.5 animations:^{
        view.frame = CGRectMake(x, y, width, height);
    }];
}

- (IBAction)buttonPressed:(id)sender {

    [self performSelector:@selector(repositionViewRandomly:) withObject:sender afterDelay:1.0];
}
于 2013-01-27T02:04:17.030 に答える
0

この問題は、自動レイアウト(制約と呼ばれる算術ルールに基づいてコントロールの配置を制御するiOS 6の機能)の結果である可能性があります。自動レイアウトがオンになっているかどうかを確認するには、ストーリーボード/ NIBを開き、option+ command-1を押して[ファイルインスペクター]に移動します(または、右端のパネルにある最初の[ファイルインスペクター]タブをクリックします)。自動レイアウト」がチェックされているかどうか。

自動レイアウトがオンの場合、フレームを変更した後でも、制約が再適用され、コントロールは制約によって指定された場所に戻されます。自動レイアウトをオフにするか、自動レイアウトをオンのままにして、フレームを変更するのではなく、プログラムで制約を削除するか、プログラムで制約を変更することができます。

制約を変更してアニメーション化する方法の例については、この回答を参照してください。ただし、自動レイアウトをオフにするのが最も簡単です。

自動レイアウト設定

自動ラウトに関する背景情報とさまざまなソースへのリンクについては、 Cocoa AutoLayoutGuideを参照してください。

于 2013-01-27T02:29:00.500 に答える