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循環)。有沒有解決方案? –