Saya mendapat jawaban ini dari menekananswer.com, saya pikir ini dapat membantu Anda.
Karena saat ini saya tidak dapat menggunakan keypath "posisi" untuk menganimasikan, saya akhirnya menganimasikannya menggunakan keypath "latitude" dan "longitude" secara terpisah.
Pertama hitung poin dan tambahkan ke 2 larik terpisah, satu untuk nilai lintang (y) dan satu untuk bujur (x) dan kemudian gunakan properti values di CAKeyFrameAnimation untuk menganimasikan. Buat 2 objek CAKeyFrameAnimation (1 untuk setiap sumbu) dan kelompokkan bersama-sama menggunakan CAAnimationGroup dan animasikan bersama-sama untuk membentuk lingkaran.
Dalam persamaan saya, saya memvariasikan panjang jari-jari pada setiap sumbu sehingga saya juga dapat menghasilkan jalur oval.
NSMutableArray *latitudes = [NSMutableArray arrayWithCapacity:21];
NSMutableArray *longitudes = [NSMutableArray arrayWithCapacity:21];
for (int i = 0; i <= 20; i++) {
CGFloat radians = (float)i * ((2.0f * M_PI) / 20.0f);
// Calculate the x,y coordinate using the angle
CGFloat x = hDist * cosf(radians);
CGFloat y = vDist * sinf(radians);
// Calculate the real lat and lon using the
// current lat and lon as center points.
y = marker.position.latitude + y;
x = marker.position.longitude + x;
[longitudes addObject:[NSNumber numberWithFloat:x]];
[latitudes addObject:[NSNumber numberWithFloat:y]];
}
CAKeyframeAnimation *horizontalAnimation = [CAKeyframeAnimation animationWithKeyPath:@"longitude"];
horizontalAnimation.values = longitudes;
horizontalAnimation.duration = duration;
CAKeyframeAnimation *verticleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"latitude"];
verticleAnimation.values = latitudes;
verticleAnimation.duration = duration;
CAAnimationGroup *group = [[CAAnimationGroup alloc] init];
group.animations = @[horizontalAnimation, verticleAnimation];
group.duration = duration;
group.repeatCount = HUGE_VALF;
[marker.layer addAnimation:group forKey:[NSString stringWithFormat:@"circular-%@",marker.description]];