Мне не совсем понятно, чего вы пытаетесь достичь. Кажется, что каждый раз, когда запускается акселерометр, вы добавляете новую анимацию imageView и хотите переместить ее на основе некоторых правил, а также уменьшить изображение. Есть проблемы с вашим кодом, хотя. Вы никогда не звоните [imageView2 release];
, и поэтому, возможно, через некоторое время у вас проблемы с памятью.
Возможно, вы также выполняете слишком много вычислений в методе @selector(removeSmoke:finished:context:)
, но мне нужно увидеть код, чтобы помочь с этим.
Если вы знаете, сколько UIImageViews вы планируете иметь за один раз, вероятно, лучше предварительно загрузить их и поместить в массив для более удобного доступа. Таким образом, вы можете переместить один UIImageView и перейти к следующему.
Если вы снимаете для iOS 4.0 или выше, я бы также рекомендовал использовать анимацию блоков. Они проще в использовании, и я нахожу намного проще и на процессоре. Что-то вроде:
[UIView animateWithDuration:10.5
animations:^{
CGRect newRect = imageView2.frame;
newRect.origin.x -= newX-2;
newRect.origin.y -= newY-2;
imageView2.frame = newRect;
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.1
animations:^{
// This is where you complete your animation, maybe remove from view or something?
}
completion:^(BOOL finished){
;
}];
}];
Наконец, вместо добавления и удаления из вида, я бы предложил вам просто установить imageView2.hidden = YES;
, и таким образом он не будет прорисован и будет иметь тот же эффект. Надеюсь, это поможет!