2009-12-02 34 views
0

我正在应用CAAnimation在屏幕上和屏幕上移动工具栏。CAAnimation持续时间不适用

当我触摸上海华,触发该下面的方法:

- (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; 
} 

kViewerToggleToolbarAnimationkViewerToolbarHideAnimationDurationkViewerToolbarShowAnimationDuration在别处定义为常数:

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秒是非常明显的长时间,否则动画会运行,如果它正常工作。

我在做什么错误的动作,导致这些持续时间常量被忽略?否则它会编译并运行良好,所以它不会抱怨无法找到常量。

回答

0

不是100%确定的,但是如果您在事务中隐藏了显式动画(它隐含地这样做),它将按照事务的持续时间来缩放它们的持续时间。

尝试通过+setAnimationDuration:UIView而不是事务块内设置持续时间。