Как правильно выпустить вид после анимации UIView? :) - PullRequest
1 голос
/ 01 марта 2011

У меня есть метод, подобный следующему:

- (void)add:(id)sender {

MyAddViewController *controller = nil;

controller = [[MyAddViewController alloc] initWithAddType:1];

//controller.delegate = self; 

// Do some animation. Slide it in from the right side of the screen.

    CGPoint initialCenter = self.view.center;
    controller.view.center = 
        CGPointMake(initialCenter.x + 320, initialCenter.y);

    // Add the subview now with it's center + 320 off the screen.
    [self.view addSubview:controller.view];

    [UIView beginAnimations:@"animation" context:NULL];
    [UIView setAnimationDuration:0.35];
    [UIView setAnimationDelegate:self];
    controller.view.center = CGPointMake(initialCenter.x, initialCenter.y); 
  //[UIView setAnimationDidStopSelector:@selector(aMethodToBeCalledAfterAnimationEnd:finished:context:)];
    [UIView commitAnimations];

  //[controller release];
    }

Вы видите, что у меня релиз контроллера в качестве последней строки в моем методе добавления.Если я раскомментирую эту строку, анимация полностью умирает, и она просто сбрасывает представление на место без анимации.

Есть ли лучший способ сделать release без необходимости создания другого метода, выполняющего очисткучерез [UIView setAnimationDidStopSelect: @selector (aMethodToBeCalledAfterAnmiationEnd ... ?

Или я могу сделать что-то вроде setAnimationDidStopSelector: @selector ([выпуск контроллера]) :)

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 01 марта 2011

Использование setAnimationDidStopSelector: является правильным способом решения общей проблемы освобождения ресурсов после завершения анимации.

Сделайте шаг назад и пересмотрите то, что вы здесь делаете. Почему вы ищете, чтобы освободить контроллер, который вы только что создали? Если вы создаете контроллер только для того, чтобы получить представление, это неправильный способ сделать это. Создайте себе фабричный метод для создания своего представления или используйте методы в NSBundle для загрузки представления из NIB.

0 голосов
/ 01 марта 2011

Я вижу, вы пометили этот iphone-sdk-4.0. Вы можете использовать новые блочные анимации для этой и любой другой очистки. Подробнее см. в документации .

0 голосов
/ 01 марта 2011

Вы можете сделать это:

[UIView setAnimationDelegate: controller];
[UIView setAnimationDidStopSelector:@selector(release)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...