2016-05-01 10 views
0
- (void)createCar 
{ 
    _car = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 10)]; 
    [_car setBackgroundColor:[UIColor redColor]]; 
    [self addSubview:_car]; 

    _myTimer = [NSTimer scheduledTimerWithTimeInterval:normalSpeedValue target:self selector:@selector(moveCar) userInfo:nil repeats:YES]; 
} 

- (void)moveCar 
{ 
    static int move = 0; 
    move = move+1; 
    [_car setFrame:(CGRectMake(move, 0, 40, 10))]; 
} 

これはビューを作成し、アニメーションを左から右に動かす方法です。複数のNSTimerアニメーションビュー

"createCar"メソッドをもう一度呼び出すと、新しいビューが作成されますが、アニメーション化されません。何故ですか?

もっと多くのビューを作成してアニメーション化できるようにしたい(moveCar)。タイマー、moveCar上のコールバックは、唯一_car IVARに保存されている最も最近作成した車への参照を持っているので、

+0

[あなたの前の1つを更新するのではなく、新しい質問を投稿したのはなぜですか(http://stackoverflow.com/questions/36961009/multiple-instances-of-the-same-view-with -different-timer)? – rmaddy

+0

あなたの 'normalSpeedValue'は何に設定されていますか? – hola

+0

@hola normalSpeedValue = 0.01 – Joe

答えて

0

createCarへの追加の呼び出しが動か作成した理由、まだ目に見える車は、あります。

過去に作成された車はまだ表示されていますが、まだ追加されているビューはそれらを参照しているため、引き続きその車を描画するためです。

車のNSMutableArrayを作成し、createCarに追加してから、moveCarの方法で各車を移動するアレイをループして修正できます。

サンプルコード:

// ... 
NSMutableArray<UIView *> *_cars; // Be sure to init this somewhere 
// ... 

// ... 
timer = NSTimer.schedule ... // Schedule time in viewDidLoad, or somwhere 
// ... 

- (void)createCar 
{ 
    UIView *_car = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 100, 100)]; 
    [_car setBackgroundColor: [UIColor redColor]]; 
    [self.view addSubview: _car]; 

    [_cars addObject:_car]; 
} 

- (void)moveCars 
{ 
    // go through each car 
    [_cars enumerateObjectsUsingBlock:^(UIView *car, NSUInteger i, BOOL *stop) { 
     // and set its frame.x + 1 relative to its old frame 
     [car setFrame: CGRectMake(car.frame.origin.x + 1, 0, 100, 100)]; 
    }]; 
} 

これはそれを行うの一つの簡単な方法です。しかし、車種ごとに異なるスピードのような柔軟性が必要な場合は、やり直しが必要です。

希望すると便利です。

0

メソッドが呼び出されるときに移動が0になるたびに。それをインスタンス変数として宣言し、createCarメソッドの初期値0(あなたの場合)を設定します。私はこれがあなたが欲しいと思う。これが助けてくれることを願っています:)

+0

静的変数は一度宣言され、プログラムの存続期間中存在します。宣言は繰り返されず、インクリメントが機能します。 – hola