1

私は を持ってCALayerCAKeyFrameAnimationます。

の内容の変更を検出する方法はありCALayerますか?

CALayerの内容(画像)がで変わるたびにCAKeyFrameAnimationで短い音を鳴らしたいという感じAVAudioPlayerです。

アップデート

こんな感じで解決しました。

- (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もちろん、不要になったら無効にすることを忘れないでください。

4

1 に答える 1

0

CADisplayLinkここで説明されているように、仕事をする必要があるようです: CAKeyFrameAnimation 中の衝突の検出

基本的:

CADisplayLink オブジェクトは、アプリケーションが描画をディスプレイのリフレッシュ レートに同期できるようにするタイマー オブジェクトです。

アプリケーションは新しい表示リンクを作成し、画面が更新されたときに呼び出されるターゲット オブジェクトとセレクターを提供します。次に、アプリケーションは表示リンクを実行ループに追加します。

出典: CADisplayLink に関する Apple のドキュメント

于 2014-02-13T14:33:11.780 に答える