具有不同定时器的相同视图的多个实例
问题描述:
我有一个名为“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”方法来为其设置动画。
如何创建多个“汽车”视图并为它们设置动画?
谢谢
答
问题是'移动'被设置为所有汽车使用的变量。你可以做一些事情:
- (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。只要你等待足够长的时间再次点击按钮,你会看到新车与旧车分开运行。
你能看到我对这个问题的最新答案吗?它显示实际代码 – Joe
userInfo不能直接处理对象,只能通过NSDictionary。所以是的,我通过了_car对象视图NSDictionary正如你所建议的,并且不工作,因为_car对象被再次创建,我将只工作,直到我再次调用'moveCarWithTimer' – Joe
我已经修改了答案,希望这有助于。 –