2009-12-02 76 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而不是事務塊內設置持續時間。