2013-07-19 41 views
2

根據核心動畫文檔,設置圖層內容應觸發隱式0.25動畫,該動畫將在新圖像和舊圖像之間切換。 我也看到很多地方,人們都在問如何去除這個隱含的動畫,但是由於某種原因,當我在我的項目上嘗試這個時,我得到了圖像的即時交換。 讀一些進入機制的文檔,我看到這個代碼剪斷:CALayer「內容」屬性上的隱式動畫

- (id<CAAction>)actionForLayer:(CALayer *)theLayer 
         forKey:(NSString *)theKey { 
    CATransition *theAnimation=nil; 

    if ([theKey isEqualToString:@"contents"]) { 

     theAnimation = [[CATransition alloc] init]; 
     theAnimation.duration = 1.0; 
     theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
     theAnimation.type = kCATransitionPush; 
     theAnimation.subtype = kCATransitionFromRight; 
    } 
    return theAnimation; 
} 

這意味着「內容」是不是暗示動畫。

我會很有興趣更好地理解這一點。

+0

你不理解什麼? –

+0

它應該是動畫?如果沒有,爲什麼我不看這個? –

+0

如果您明確使用該轉換進行動畫製作,它是否可以正常工作? –

回答

1

好的,我正在從我的一個應用程序複製一些代碼。首先,我通常不會使用alloc..init而是使用+動畫。其次,我沒有看到你正在向圖層添加過渡。第三我不確定CATransition是隱式動畫,CALayer屬性是。

CATransition *transition = [CATransition animation]; 
    transition.duration = 1; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = slideCATransitionCompareTable[ arc4random() % 4]; //to get a random subtype 
    [self.slideShowReceiptImageView.layer addAnimation:transition forKey:nil]; 
+0

該行爲沒有明確地添加到一個圖層,因爲它是在'actionForLayer:forKey:' –

+0

內部創建的,很好的一點,不知道。 'actionForLayer:forKey:'方法是CALayerDelgate協議的委託方法,你說得對。 – Andrea

+0

謝謝!這是我可以實現「內容」動畫的唯一方法。 – Serzhas