すべて、マップが自分の場所を示すために使用するパルス状の青い円の効果を再現する作業を行っています...
MKMapView の上に UIView を重ねました。UIView には、パルス アニメーションが含まれています。
ここでのスタックオーバーフローに関する多数の回答から収集された次のコードを使用することになりました。
CABasicAnimation* pulseAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
pulseAnimation.toValue = [NSNumber numberWithFloat: 0.0];
pulseAnimation.duration = 1.0;
pulseAnimation.repeatCount = HUGE_VALF;
pulseAnimation.autoreverses = YES;
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:pulseAnimation forKey:@"pulseAnimation"];
CABasicAnimation* resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
resizeAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0.0f, 0.0f)];
resizeAnimation.fillMode = kCAFillModeBoth;
resizeAnimation.duration = 1.0;
resizeAnimation.repeatCount = HUGE_VALF;
resizeAnimation.autoreverses = YES;
resizeAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:resizeAnimation forKey:@"resizeAnimation"];
これは、以下を使用して UIView で描いた円をパルス化/フェード化するという受け入れ可能な仕事を行います。
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 0.4);
// And draw with a blue fill color
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 0.1);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
CGContextAddEllipseInRect(context, CGRectMake(x-30, y-30, 60.0, 60.0));
CGContextDrawPath(context, kCGPathFillStroke);
しかし、これは機能しているように見えますが、下にあるマップを別の位置にドラッグするとすぐにアニメーションが台無しになることがすぐにわかりました...ハイライトしたい位置が画面の中央にある間、ドラッグするとアニメーションは正常に機能します位置が中央に配置されなくなるため、アニメーションは画面の中央から始まり、中央からドラッグされた位置の中央まで拡大し、再び戻ってきます... ユーモラスでクールな効果ですが、私が探していたものではありません.
私はいくつかの面で幸運だったかもしれないことに気づきました。何を誤解したのかわかりません。アニメーションがレイヤー全体をスケーリングしていると思いますが、たまたま円が真ん中に描かれています。したがって、中心にあるときは機能しますが、中心から外れると機能しません。
この質問を開始したときに、stackoverflow によって提案された質問の 1 つから収集した次のことを試しました。
CABasicAnimation* translateAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
translateAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(oldx, oldy )];
translateAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(x, y )];
// translateAnimation.fillMode = kCAFillModeBoth; translateAnimation.duration = 1.0; translateAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; [self.layer addAnimation:translateAnimation forKey:@"translateAnimation"];
しかし、それはあまり役に立ちません。それで遊んでいると、中心から外した後、一度正しい場所でアニメーション化されるように見えることがありますが、その後、中心点から新しい場所へのアニメーション化に戻ります。
すっごく、何か提案があるか、追加情報を提供する必要がありますか。