![]() |
|
|
![]()
|
|
| 200cm3 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
в моем приложении используется анимация слоев, на определенном этапе мне необходимо вращать слой для этого сделал процедуру которой я в качестве параметра передаю слой и угол до которого хочу довернуть слой
- (void) LrByRotate:(CALayer *)lr :(float) angle : (float) dura : (NSString *)keyPath{ CABasicAnimation *rota = [CABasicAnimation animationWithKeyPath:@"transform.rotation" ]; rota.fillMode = kCAFillModeForwards; rota.duration = dura; rota.delegate = self; rota.autoreverses = NO; rota.removedOnCompletion = NO; rota.byValue = [NSNumber numberWithFloat: DegreesToRadians(angle) ]; [rota setValue:keyPath forKey:@"myAnim"]; [lr addAnimation: rota forKey: nil]; } -(void) Meln{ [self LrByRotate:lr3KrilyaMelnici :360/sector * (vectorMeln): duraMeln : @"Meln"]; } - (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { NSString* value = [theAnimation valueForKey:@"myAnim"]; // NSLog(@"DID STOP %@", value); if ([value isEqualToString:@"Meln"]) { [self Meln]; } } Если вызывать более 200х раз то появляются тормоза в следствии утечки памяти непосредственный вопрос что я делаю не так? |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Мне кажется, что утечка заключается в том, что Вы каждый вызов функции создаете объект класс CABasicAnimation и нигде его не уничтожаете. Хотя может все добавленные анимации уничтожаются автоматически по окончании, я точно не знаю, но думаю искать надо тут
|
|||
|
||||
| 200cm3 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
к сожалению я не могу уничтожить объект пока не закончилась анимация, а потом уже нет ссылки на класс
|
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Попробуйте в функции - (void) animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
первой строчкой написать [lr3KrilyaMelnici removeAnimationForKey:@"Meln"]; А в функции - (void) LrByRotate:(CALayer *)lr :(float) angle : (float) dura : (NSString *)keyPath заменить строку [lr addAnimation: rota forKey: nil]; на [lr addAnimation: rota forKey: @"Meln"]; то есть при добавлении анимации, ей задается имя, а при окончании анимации, зная ее имя удаляем ее. |
|||
|
||||
| 200cm3 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Спасибо что вникаете в проблему.
[lr3KrilyaMelnici removeAnimationForKey:@"Meln"]; - пробовал, пробовал а также [lr3KrilyaMelnici removeAllAnimations]; память не освобождается( [lr addAnimation: rota forKey: nil]; было написано чтоб получить свойства делегата а именно доступ к animationDidStop но тем не менее попробовал с тем же результом |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 10 Всего: 27 |
Единственное что еще могу предположить - это либо память засоряется за пределами этих трех функций, либо у вас еще каким-то параллельным образом вызывается функция Meln постоянно добавляя новые циклы анимации. Это то, что я могу предположить, может быть проблема в другом. Все таки оставьте [lr3KrilyaMelnici removeAnimationForKey:@"Meln"] на всякий случай (или прочтите документацию о том нужно ли удалять ее или она сама удаляется)
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | iOS | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |