GMSMarker不透明度动画不重复

The*_*heo 6 iphone google-maps google-maps-markers ios google-maps-sdk-ios

我正在尝试制作一个带有自动图标闪烁的GMSMarker,并带有衰减的动画不透明度.动画应重复几次,但事实并非如此,只是执行一次转换然后停止.这仅在动画不透明度属性时发生,它在动画其他属性时工作正常.

这是代码:

GMSMarkerLayer* layer = marker.layer;
CABasicAnimation *blink = [CABasicAnimation animationWithKeyPath:@"opacity"];
blink.fromValue = [NSNumber numberWithFloat:0.0];
blink.toValue = [NSNumber numberWithFloat:1.0];
blink.duration = 1.0; 
blink.autoreverses = YES;
blink.repeatCount = 4;   
[layer addAnimation:blink forKey:@"blinkmarker"];
Run Code Online (Sandbox Code Playgroud)

文档说我应该能够设置不透明度的动画,因为它是GMSMarkerLayer允许我们使用的属性之一.

我做错了什么或者是我刚遇到的已知错误?

san*_*nna 5

我的解决方案是为动画添加一个委托:

CABasicAnimation *blink = [CABasicAnimation animationWithKeyPath:@"opacity"];
blink.fromValue = [NSNumber numberWithFloat:1.0];
blink.toValue = [NSNumber numberWithFloat:0.0];
blink.duration = 1.5;
[blink setDelegate:self];
[placeMarker.layer addAnimation:blink forKey:@"blinkmarker"];
Run Code Online (Sandbox Code Playgroud)

然后当动画完成后,我得到一个回调并再次添加:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    if (flag) {
        CABasicAnimation *blink = [CABasicAnimation animationWithKeyPath:kGMSMarkerLayerOpacity];
        blink.fromValue = [NSNumber numberWithFloat:1.0];
        blink.toValue = [NSNumber numberWithFloat:0.0];
        blink.duration = 1.5;
        [blink setDelegate:self];
        [placeMarker.layer addAnimation:blink forKey:@"blinkmarker"];
    }
}
Run Code Online (Sandbox Code Playgroud)

我不得不这样做,因为GMSMarkerLayer并不关心重复动画.我尝试在回调中重复使用动画并再次添加它,但这不起作用.