Tôi nhận được câu trả lời này từ pressanswer.com, tôi nghĩ nó có thể giúp ích cho bạn.
Vì hiện tại tôi không thể sử dụng đường dẫn phím "vị trí" để tạo hoạt ảnh, nên tôi đã kết thúc hoạt ảnh bằng cách sử dụng đường dẫn phím "vĩ độ" và "kinh độ" riêng biệt.
Đầu tiên hãy tính toán các điểm và thêm chúng vào 2 mảng riêng biệt, một mảng cho giá trị vĩ độ (y) và một cho kinh độ (x), sau đó sử dụng thuộc tính giá trị trong CAKeyFrameAnimation để tạo hiệu ứng. Tạo 2 đối tượng CAKeyFrameAnimation (1 đối tượng cho mỗi trục) và nhóm chúng lại với nhau bằng CAAnimationGroup và tạo hiệu ứng động chúng lại với nhau để tạo thành một vòng tròn.
Trong phương trình của tôi, tôi thay đổi độ dài của bán kính trên mỗi trục để tôi cũng có thể tạo ra một đường hình bầu dục.
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]];