2016-04-30 99 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

我已经修改了答案,希望这有助于。 –

相关问题