Я применяю CAAnimation
для перемещения панели инструментов на экране и вне экрана.Продолжительность CAAnimation не применяется
Когда я коснуться SuperView, что пожары следующий метод:
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[UIView beginAnimations:kViewerToggleToolbarAnimation context:nil];
if (self.viewerToolbarView.isVisible) {
self.viewerToolbarView.frame = CGRectMake(0, self.frame.size.height, self.viewerToolbarView.frame.size.width, self.viewerToolbarView.frame.size.height);
self.viewerToolbarView.isVisible = NO;
}
else {
self.viewerToolbarView.frame = CGRectMake(0, self.frame.size.height - kUIToolbarHeight, self.viewerToolbarView.frame.size.width, self.viewerToolbarView.frame.size.height);
self.viewerToolbarView.isVisible = YES;
}
[UIView commitAnimations];
}
Это, в свою очередь, пожары метод делегировать подвид в:
- (id<CAAction>) actionForLayer:(CALayer *)layer forKey:(NSString *)key {
id<CAAction> animation = nil;
if ([key isEqualToString:kViewerToggleToolbarAnimation]) {
animation = [CABasicAnimation animation];
if (self.isVisible)
((CABasicAnimation*)animation).duration = kViewerToolbarHideAnimationDuration;
else
((CABasicAnimation*)animation).duration = kViewerToolbarShowAnimationDuration;
((CABasicAnimation*)animation).timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
}
else {
animation = [super actionForLayer:layer forKey:key];
}
return animation;
}
константы kViewerToggleToolbarAnimation
, kViewerToolbarHideAnimationDuration
и kViewerToolbarShowAnimationDuration
определены в других местах :
extern NSString * const kViewerToggleToolbarAnimation;
extern CGFloat const kViewerToolbarShowAnimationDuration;
extern CGFloat const kViewerToolbarHideAnimationDuration;
...
NSString * const kViewerToggleToolbarAnimation = @"kViewerToggleToolbarAnimation";
CGFloat const kViewerToolbarShowAnimationDuration = 2.50f;
CGFloat const kViewerToolbarHideAnimationDuration = 2.75f;
Проблема заключается в том, что я могу увеличить эти значения продолжительности в файле констант, но метод делегата игнорирует эти длительности и применяет свою значительную короткую продолжительность (0,5 секунды, примерно).
2.5 и 2.75 с довольно заметные длительные времена, когда анимация в противном случае запускалась бы, если бы работала должным образом.
Что я делаю неправильно, чтобы запустить анимацию, которая заставляет эти константы продолжительности игнорироваться? Он иначе компилируется и работает нормально, поэтому он не жалуется, что не может найти константы.