5

我试图让GMSMarker带有一个自定义图标闪烁着衰减的动画不透明度。 动画应该重复几次,但它不会,它只执行一次转换,然后停止。 这只发生在动画不透明属性时,它在动画制作其他属性时工作正常。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"]; 

文档说我应该能够以动画的不透明度,因为它是GMSMarkerLayer可以让我们的属性之一。

我做错了什么,或者是我刚碰到的一个已知错误?

+0

似乎是一个错误:( – decades

回答

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"]; 

然后当该动画完成我得到一个回调,然后重新添加:

- (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"]; 
    } 
} 

我不得不这样做因为GMSMarkerLayer不关心重复动画。我尝试在回调中重复使用动画,并再次添加,但没有奏效。

+0

它不适用于多标记(例如For循环)。有没有解决方案? –