2015-02-02 1 views
0

Я работаю над приложением, которое имеет некоторые анимации. Если пользователь нажимает на homebotton и решает вернуться в приложение - в ViewController, где происходят анимации, - ViewController должен отображаться, поскольку пользователь только что вводил его в обычном порядке (анимация начинается с самого начала). Я использую CABasigAnimation. Может кто-нибудь, пожалуйста, скажите мне, как сбросить ViewController или что-то подобное?Как сбросить ViewController после нажатия кнопки homebutton и вернуться к тому же ViewController

Я думал о жизненном цикле в ViewController, но я не смог найти метод, аналогичный методу onRestart() Android Activity, где вы можете поместить код, если userer входит в активность снова.

Код для анимации:

CAShapeLayer *progressCircle = [CAShapeLayer layer]; 
//.... 
[self.view.layer addSublayer:progressCircle]; 
CABasicAnimation *drawAnimation2 = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
//.... 
[progressCircle addAnimation:drawAnimation2 forKey:@"drawCircleAnimation"]; 

ответ

5

Метод вы ищете в вашем классе AppDelegate. Все уведомления открытия/закрытия и системы имеют место в AppDelegate.m

Метод вы ищете в AppDelegate.m является:

-(void)applicationDidBecomeActive:(UIApplication *)application 

Для того, чтобы получить это уведомление на желаемом ViewController необходимо добавить следуя методу viewDidLoad вашего контроллера:

[[NSNotificationCenter defaultCenter]addObserver:self 
            selector:@selector(resetAnimationMethod) 
             name:UIApplicationDidBecomeActiveNotification 
             object:nil]; 

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

Для удаления старых слоев:

for (CALayer *oldLayers in self.view.layer.sublayers) { 
    [oldLayers removeFromSuperlayer]; 
} 
+0

благодарит за ответ. Я реализовал resetAnimationMethod, и мне удалось снова запустить анимацию. Но предыдущая анимация все еще видна, и я не могу понять, как ее удалить. Я добавил код для моей анимации в вопросе – moobi

+0

@moobi, перед тем как сбросить анимацию, вы должны удалить старый слой, добавленный вами (progressCircle). Для этого вы должны добавить следующее перед вашим анимационным кодом: self.view.layer = nil; – JustAnotherCoder

+0

Если мне нравится использовать 'self.view.layer = nil;' возникает ошибка, говоря: «Назначение для свойства readonly» :( – moobi

0

Вы можете попробовать переустановку его на viewWillAppear() или аналогичные такие методы, которые вызываются для различных фаз, переходя от одного к другому ViewController.

0

Вы можете аннулировать источник данных, используемый для заполнения представления таблицы, а затем использовать данные перезагрузки в самом представлении таблицы. Когда вы просто сбрасываете источник данных и перезагружаете представление таблицы, он теперь будет пустым. Просто снимите и перезагрузите представление жизненного цикла viewWillDisappear, например.

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

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