1) установить предварительную версию
$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
2) Перейдите в папку src и получите tar-файл python3.5.2
$ cd /usr/src
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
3) Теперь распакуйте загруженный архив на свой система.
$ sudo tar xzf Python-3.5.2.tgz
4) Скомпилируйте источник, используя alInstall
$ cd Python-3.5.2
$ sudo ./configure --enable-optimizations
$ sudo make altinstall
5) Проверьте установку
$ python3.5 -V
Я знаю, что Вы сказали использование CAKeyframeAnimations, но если Вы хотите простую анимацию свойств UIView (источник, границы, альфа, и т.д.), можно перенести изменение свойства или свойств в начинании / блок фиксации и указать метод делегата, который называют после завершения анимации. Пока метод делегата берет три аргумента, можно назвать его вообще, Вы хотите. Например:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(yourAnimationHasFinished:finished:context:)];
// Change property or properties here
[UIView commitAnimations];
вызовет метод
- (void)yourAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context;
быть названным. Произвольное именование этого позволяет, предоставил бы Вам с помощью разделения обработки для завершения различных анимаций. Я предпочитаю это для простых анимаций.
Для контакта с более сложными анимациями, которые взаимодействуют непосредственно с CALayers, animationDidStop:finished: метод делегата действительно возвращает объект Animation, который закончился. При создании одного экземпляра, который является делегатом к нескольким анимациям, Вы могли создать NSMutableDictionary анимаций и NSNumbers для использования в операторе переключения в animationDidStop:finished: метод. Поскольку Вы создаете CAKeyframeAnimation, используйте setObject:forKey: для присвоения его его соответствию числу затем используйте objectForKey: найти число, которое соответствует той анимации в методе завершения и подает это в оператор переключения.
Можно указать название анимации и считать его в методе делегата.
[animation setValue:"firstAnimation" forKey:@"name"];
...
- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished {
if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) {
...
}
}