2013-05-30 3 views
0

Я начал использовать CoreAnimation в своем новом приложении, я использую CA, чтобы сделать несколько классных анимаций. Но я новичок в объективе C, и мне это сложно, и я столкнулся с этой большой проблемой:iOS Core animation и ARC

Я сделал пользовательский UIView: customView, я использую xib для получения пользовательского интерфейса и установки IBOutlet, Пользовательский вид представляет собой простой небольшой вид с UIImageView внутри.

На мой взгляд, контроллер я сделал петлю, что вставить severals customView, в этом цикле я установил как в CAnimation для зрения и для ImageView:

for (int i = 0 ; i < 8 ; i ++) 
{ 

    CABasicAnimation *balanceAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    // ... set Animation here...  
    [customView.myImgView.layer addAnimation:balanceAnimation forKey:nil]; 

    CABasicAnimation *moveUp3Bis; 
    // ... setting animation here... 
    moveUp3Bis.repeatCount = 1; 

    [customView.layer addAnimation:moveUp3Bis forKey:nil]; 

} 

Я называю этот цикл до тех пор, как вид контроллер регулятор тока после задержки 10 сек

Так взгляды получают живые, двигаться, и идти рядом с главным окном, но после долгого времени анимация медленнее и медленнее ...

конечно я понял, что моя петля добавит в стек слишком много customView, представление не выпущено (возможно, потому, что анимация все еще включена?)

Я думал, что через некоторое время будут выпущены представления, но я думаю, что представление будет двигаться навсегда. Может быть, мне нужно установить указатель на мой просмотр и отпустить его после задержки? Я уверен, что CA что-то запланировал для такого случая?

Но я не знаю, что я могу сделать?

Благодарим за любую помощь.

+0

Возможно, вы используете некоторые другие ресурсы (например, виды), а не анимации. Изменились ли ваши взгляды у их родителей? ('- [UIView removeFromSuperview]') – nielsbot

ответ

0

Вы пробовали установить -[CABasicAnimation removedOnCompletion]?

Похоже, что это значение по умолчанию - YES, поэтому я не думаю, что это ваша проблема, но стоит посмотреть.


Вы пробовали использовать Профайл, чтобы узнать, что замедляет все?

+0

Да, все мои анимации установлены на removeOnCompletion = YES – user2206906

+0

Ну, я не знаю, что такое Профиль – user2206906

+0

a ok CMD + I, пытаюсь ... – user2206906

0

Из фрагмента кода, который вы добавили, сложно сказать, что вы делаете с вашими представлениями, но вы обязательно должны удалить их из своего родительского представления, иначе они не будут выпущены.

Итак, я предлагаю, чтобы вы попытались удалить представления перед тем, как начать цикл, и просто чтобы у вас была крутая анимация, вы должны удалить представление, только если оно не анимируется, для этого вам нужно будет добавить ключевую строку для вашей анимации, используя ваш текущий метод addAnimation:balanceAnimation forKey:nil, вместо того, чтобы установить его на нуль и проверить уровень представления для animationKeys, если массив пуст или нуль, анимация завершена, если она еще не анимируется.

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