У меня проблема с CAKeyframeAnimation. После анимации слоя UIView я хотел бы расположить UIView в позиции, в которой я анимирую, чтобы пользователь мог продолжать использовать кнопки на этом UIView.
В настоящее время я использую этот код:
// Open animation
CAKeyframeAnimation *openAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.y"];
openAnimation.fillMode = kCAFillModeForwards;
openAnimation.duration = .55;
openAnimation.delegate = self;
openAnimation.removedOnCompletion = NO;
openAnimation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:58.0],
[NSNumber numberWithFloat:48.0], nil];
openAnimation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.62],
[NSNumber numberWithFloat:1.0], nil];
openAnimation.timingFunctions = [NSArray arrayWithObjects:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], nil];
[locationView.layer addAnimation:openAnimation forKey:@"OPEN_ANIMATION"];
И метод делегата:
- (void)animationDidStop:(CAKeyframeAnimation *)anim finished:(BOOL)flag
{
locationView.y = -10.0;
}
Это действительно работает, но в конце у меня возникает этот сбой отображения, когда анимация удаляется (слой UIView возвращается в исходное положение) и мгновенно вызывает метод делегата, который заставляет его перейти в конечную позицию.
Мне кажется, что процедура в конце следующая: анимация завершается, визуализирует последний кадр анимации, возвращается в исходное положение, визуализирует этот кадр, вызывает метод делегата и помещает uiview в его конечную позицию.
Как я могу исправить этот глюк дисплея?