2012-07-11 34 views
8

Tôi thêm một CABasicAnimation vào lớp AnnotationView để mô phỏng một chiếc xe đang di chuyển trên chế độ xem bản đồ.AnnotationView hoạt ảnh biến mất trong khi phóng to chế độ xem bản đồ?

Tính năng này hoạt động tốt cho đến khi tôi cố gắng phóng to hoặc thu nhỏ chế độ xem bản đồ khi hoạt ảnh đang diễn ra.

Tôi thấy chế độ xem chú thích hoạt ảnh biến mất khi phóng to chế độ xem bản đồ !!

Tôi đoán điều này có thể do lớp liên quan đến đối tượng hoạt ảnh đã bị xóa khi thu phóng chế độ xem bản đồ.

Tôi cố gắng giải quyết vấn đề này bằng cách dừng hoạt ảnh khi thu phóng. nhưng kết quả là không tốt. Chiếc xe dường như nhảy đến điểm mục tiêu.

Bất kỳ ai cũng có ý tưởng về điều này?

Bất kỳ ai biết cách làm cho hoạt ảnh vẫn chạy khi thu phóng chế độ xem bản đồ?

+0

Bạn có thực hiện bất kỳ tiến bộ về vấn đề này? Tôi đang gặp vấn đề tương tự và muốn giải quyết nó. –

+0

@Hubert bạn có thể đăng mã chú thích di chuyển của mình không? – Mubbashar

Trả lời

1

Tôi không biết cách giải quyết vấn đề của bạn theo chương trình, nhưng nếu lưu trữ vị trí ô tô (điểm a) ngay khi người dùng bắt đầu thu phóng, khi thu phóng hoàn tất, tính khoảng cách giữa vị trí hiện tại và vị trí (điểm b) và sau đó tạo hiệu ứng động từ điểm a đến điểm b. Bằng cách này chiếc xe sẽ không seam để "nhảy" đến điểm mục tiêu thứ hai. Để làm cho nó một chút huyền ảo, bắt đầu tốc độ của chiếc xe ở tốc độ bình thường gấp đôi và sau đó giảm tốc độ bình thường khi bạn đến gần điểm "B" hơn. Tôi nghĩ rằng điều này sẽ làm cho nó trông giống như một lỗi và giống như một hiệu ứng.

+0

Ý tưởng hay, nhưng tôi thực sự cần câu trả lời với mã làm việc. Tôi thậm chí không biết làm thế nào để phát hiện khi người dùng đang phóng to trong MKMapView. – Felix

0

Tôi nghĩ, bạn có thể sử dụng phương thức ủy quyền mapView:regionDidChangeAnimated:. Bất cứ khi nào người dùng cuộn/thu phóng, phương thức này sẽ được gọi. chỉ cần thử một lần. Nó có thể giúp bạn.

1

Tôi giải quyết nó bằng cách chấm dứt tất cả các hình ảnh động chú thích trên regionWillChangeAnimated: -

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
{ 

    for (int i=0;i< [mapView.annotations count];i++) 
    { 
    id annotation = [mapView.annotations objectAtIndex:i]; 

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation]; 
    if (annView != nil) 
    { 

     CALayer* layer = annView.layer; 
     [layer removeAllAnimations]; 
    } 

    } 
}