2

NSTimer一部の を移動する関数を呼び出す があります。をUIImageView無効にすると、 はその場所で停止するNSTimerと思いましたUIImageViewが、 によって設定された場所にリセットされますStoryBoard

私が間違っていることや含まれていないことはありますか、それともこれは謎ですか?

編集 - いくつかのコードを追加

.h

NSTimer *updater;

.m

updater = [NSTimer scheduledTimerWithTimeInterval:1.0f/32.0f target:self selector:@selector(gameEngine) userInfo:nil repeats:YES];


-(void)gameEngine {
    //move some images around
}

-(IBAction)action {
    [updater invalidate];
}
4

1 に答える 1

1

自動レイアウトを使用している場合、制約が再適用されると (textラベルのプロパティの設定など、無害なイベントによってトリガーされる可能性があります)、すべてが、に埋め込まれた制約によって定義された場所に戻されます。ストーリーボード (制約を変更するのではなく、オブジェクトまたはプロパティUIImageViewを変更するだけでプログラムでオブジェクトを移動しようとしていたと仮定します)。framecenter

これは、2 つの方法のいずれかで解決できます。

  1. 制約のプロパティを変更してから親ビューのメソッドを呼び出すことUIImageViewによって、オブジェクトを移動します。それ自体のまたはプロパティを変更するのではありません。これは、Interface Builder で制約自体の参照を作成すると、簡略化できます。constantlayoutIfNeededframecenterUIImageViewIBOutlet

  2. 自動自動レイアウトをオフにすると、現在のようにframeまたはcenterプロパティを使用できます。ストーリーボードを開き、一番右のパネルの最初のタブをクリックして、[自動レイアウトを使用] のチェックを外すことで、自動レイアウトをオフにすることができます。

    ここに画像の説明を入力

最初のアプローチは少し面倒です。2 番目のアプローチは簡単に見えるかもしれませんが、自動レイアウトは iOS 開発の未来であり、制約を介してコントロールの移動を習得する価値があるかもしれません。

于 2013-07-05T18:36:55.277 に答える