2016-04-30 15 views
1

"car"という名前のカスタムビューがあります。私は以前に私のサブビューに追加されたこの "車"ビューをアニメーション化するためにNSTimerを使用します。タイマーの異なる同じビューの複数のインスタンス

-(void)createRedCar 
{ 
    //-- here I create my first car 
    [self.view addSubview:car]; 

    //-- here I initiate a timer to move the car 
    myTimer calls 'moveCar' method 
} 

それから私は、このメソッドは予想通り

-(void)moveCar 
{ 
car.transform //-- here I move the car across the screen 
} 

すべてが機能し、画面上の車を移動することができます。

「車」の新しいインスタンスを作成して初めての時と同じようにアニメーション化するのに苦労しています。何か案は?

"createRedCar"メソッドをもう一度呼び出すと、 "moveCar"メソッドを呼び出してアニメーション化することなく、新しい車を画面に追加するだけです。

複数の「車」ビューを作成してアニメーション化するにはどうすればよいですか?

おかげ

答えて

0

問題は、「動き」がすべての車で使用される変数として設定されていました。

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

    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(moveCarWithTimer:) userInfo:car repeats:YES]; 
} 

- (void)moveCarWithTimer:(NSTimer *)timer 
{ 
    UIView *carToMove = [timer userInfo]; 
    [carToMove setFrame:(CGRectMake(carToMove.frame.origin.x+1, 0, 40, 10))]; 
} 

これは、現在の車のフレームに基づいてフレームを移動します。私はボタンをタップするたびにcreateCarを呼び出すという新しいプロジェクトでこれを試しました。もう一度ボタンをタップするのに十分長く待っている限り、古い車とは別に新しい車が走っています。

+0

この質問に私の最新の回答が見えますか?実際のコードを表示します – Joe

+0

userInfoはNSDictionaryを介してオブジェクトを直接処理することはできません。だから、私は_carオブジェクトビューNSDictionaryを渡しました。あなたが示唆したとおりに動作しません。_carオブジェクトが再び作成されるので、私は再び 'moveCarWithTimer'を呼び出すまで動作します。 – Joe

+0

私は答えを改訂しました。 –

関連する問題