2014-02-13 51 views
1

我有一個CALayer它有一個CAKeyFrameAnimationiOS - 檢測CALayer內容的變化

有沒有辦法檢測到CALayer的內容變化?

這就像,每當CALayer的內容(圖像)由於CAKeyFrameAnimation而改變時,我想播放一個短的聲音與AVAudioPlayer

UPDATE

我做這樣的解決它。

- (void) viewDidLoad 
{ 
    // init CADisplayLink to catch the changing moment 
    CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkContents:)]; 
    [displayLink setFrameInterval:6] // checking by every 0.1 sec (6 frames) 
    [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; 
} 

- (void) checkContents:(CADisplayLink *) sender; 
{ 
    // _newImage and _oldImage are class variables. (UIImage) 
    // animatingView is a `UIImageView` where its layer's contents is being changed by `CAKeyFrameAnimation` 

    CALayer *presentLayer = [animatingView.layer presentationLayer]; 
    _newImage = presentLayer.contents; 
    if (![_newimage isEqual:_oldImage]) 
    { 
     NSLog(@"Image changed! From %@ to %@", _oldImage, _newImage); 
    } 
    _oldImage = _newImage; 
} 

當然,不要忘記在不再需要時使CADisplayLink無效。

回答

0

好像你需要一個CADisplayLink做的工作,喜歡這裏描述:Detecting collision, during a CAKeyFrameAnimation

基本上是:

一個CADisplayLink對象是一個計時器對象,它允許您的應用程序的繪圖同步刷新顯示的速度。

您的應用程序會創建一個新的顯示鏈接,提供一個目標對象和一個在屏幕更新時調用的選擇器。接下來,您的應用程序將顯示鏈接添加到運行循環中。

來源:Apple's documentation on CADisplayLink

+0

謝謝你快回答!我會給它一個! – Woonohyo