2013-03-14 4 views
0

Я работаю над iPhone-приложением, и в моем приложении есть объект, который перемещается от верхней части к нижней части экрана. Для этого я использую ссылку CADisplay. Как только объект покидает экран, он должен перезапустить свой маршрут. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда объект перезапускает свой маршрут, он ускоряется. Это продолжается до тех пор, пока объект не станет настолько быстрым, что вы едва можете его увидеть. Любые идеи, почему это происходит и как остановить его? Любая помощь приветствуется, спасибо заранее!Касание, похоже, ускоряется каждый раз, когда метод называется

-(void)spawnButton{ 

int x = (arc4random() % (240) + 40; 
int y = -100; 

button1.center = CGPointMake(x,y); 

displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(moveObject)]; 
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 

} 



-(void) moveObject { 

int z = 1; 


button1.center = CGPointMake(button1.center.x , button1.center.y +z); 



if (button1.center.y >= 480) { 

    [self spawnButton]; 

} 
} 

ответ

1

Вы создаете новую ссылку на изображение при каждом звонке до spawnButton. Если вы ничего не делаете, чтобы удалить старую ссылку на изображение из цикла запуска, тогда старая ссылка будет продолжать отправлять сообщения moveObject:. Поэтому после двух звонков на номер spawnButton вы получите два сообщения moveObject: на видеокадр, а после трех звонков вы получите три сообщения на видеокадр и т. Д.

0

Я, кажется, решил проблему, недействив ссылку на изображение при каждом повторном запуске маршрута объектов.

if (button1.center.y >= 480) { 

[self spawnButton]; 


[displaylink invalidate]; 

} 
} 
Смежные вопросы