Мой UIViewController в стиле «библиотеки» выполняет анимацию поворота CATransform3D с углом 1,75 радиана, чтобы скрыть ее перед нажатием (без анимации) на следующий или последний вид. К сожалению, при выполнении анимации при извлечении UIViewController всплывающий VC не будет реагировать на касания.
Вещи, которые я пробовал: -
- Чтобы анимация отображалась после всплывания, а не чтобы она вообще не анимировалась, я должен задержать ее на 0,1 секунды. Для этого я использую NSObject PerformSelector:withObject:afterDelay. К сожалению, это, при идеальном выполнении анимации, вызывает проблему с моим именем.
- Чтобы использовать NSTimer для выполнения действия через 0,1 секунды и без повторения. Это ничего не делает.
- Использовать функцию задержки UIView во время анимации, а это означает, что анимация не выполняется.
- Чтобы использовать селектор для выполнения анимации, на который ссылается другой. Безрезультатно.
- Чтобы вызвать touchesEnded, пока представление не реагировало на касания, без какого-либо эффекта.
Мой текущий код, хотя и немного неопрятный (мое первое использование Core Animation/QuartzCore), это...
Чтобы выполнить анимацию, если выскочил.
//To collect it in the SecondVC
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(coolAnimation) name:@"ReturnSecond" object:nil];
//To send it from the ThirdVC
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReturnSecond" object:nil];
Чтобы поп VC
[[NSNotificationCenter defaultCenter] postNotificationName:@"ReturnWeird" object:nil];
NSUInteger integer = [[self.navigationController viewControllers] indexOfObject:self];
[[self navigationController] popToViewController:[[self.navigationController viewControllers] objectAtIndex:integer-1] animated:NO];
Чтобы представить анимацию
- (void)coolAnimation
{
[self performSelector:@selector(tryThis) withObject:nil afterDelay:0.1];
}
- (void)tryThis
{
CGRect framer = self.view.layer.frame;
self.view.layer.anchorPoint = CGPointMake(0.f, 0.f);
self.view.layer.frame = framer;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
CATransform3D rotationAndPerspectiveTransforms = CATransform3DIdentity;
rotationAndPerspectiveTransforms.m34 = 1.0 / 500;
rotationAndPerspectiveTransforms = CATransform3DRotate(rotationAndPerspectiveTransforms, 0, 0, 1, 0);
self.view.layer.transform = rotationAndPerspectiveTransforms;
[UIView commitAnimations];
CGRect framers = flippedCell.layer.frame;
flippedCell.layer.anchorPoint = CGPointMake(0.f, 0.f);
flippedCell.layer.frame = framers;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.7];
CATransform3D rotateTransform = CATransform3DIdentity;
rotateTransform.m34 = 1.0 / 500;
rotateTransform = CATransform3DRotate(rotateTransform, 0, 0, 1, 0);
flippedCell.layer.transform = rotateTransform;
[UIView commitAnimations];
[self performSelector:@selector(cellAnimationDidStop) withObject:nil afterDelay:0.7];
}
- (void)cellAnimationDidStop
{
[self.tableView reloadData];
}
Вид поворачивается на 1,75 радиана перед нажатием и поэтому будет сохраняться под этим углом преобразования до тех пор, пока не будет повернут обратно.
Любые советы для моего кода также будут оценены!