iOS-检测CALayer内容的更改

Woonohyo

我有一个CALayer,其中有一个CAKeyFrameAnimation

有没有一种方法可以检测到内容的变化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在不再需要它时使它失效

西里尔

似乎您需要CADisplayLink完成这项工作,如此处所述:在CAKeyFrameAnimation期间检测碰撞

基本上:

CADisplayLink对象是一个计时器对象,它允许您的应用程序将其图形同步到显示的刷新率。

您的应用程序将创建一个新的显示链接,其中提供了一个目标对象和一个在屏幕更新时要调用的选择器。接下来,您的应用程序将显示链接添加到运行循环。

资料来源:Apple在CADisplayLink上的文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章