2015-04-21 24 views
20

Khi sử dụng MapKit trong iOS 8 trong Swift, làm thế nào để tôi có thể tạo hiệu ứng thay đổi trong vị trí bản đồ của chú thích tùy chỉnh? Tôi đang nói điều này:Animate MapKit chú thích thay đổi phối hợp trong Swift?

UIView.animateWithDuration(0.25) { 
    var loc = ann.coordinate 
    loc.latitude = loc.latitude + 0.0005 
    loc.longitude = loc.longitude + 0.001 
    ann.coordinate = loc 
} 

... trong đó ann là chú thích tùy chỉnh, MyAnnotation. Chú thích đang nhảy, không hoạt ảnh, đến vị trí tọa độ mới.

Điều gây phiền nhiễu là hoạt ảnh hoạt động hoàn hảo nếu tôi viết MyAnnotation trong Objective-C. Nhưng nếu tôi viết nó trong Swift, tôi không nhận được hoạt hình nữa!

Just FYI, đây là mã Swift của tôi cho MyAnnotation:

class MyAnnotation : NSObject, MKAnnotation { 
    var coordinate : CLLocationCoordinate2D 
    var title: String! 
    var subtitle: String! 

    init(location coord:CLLocationCoordinate2D) { 
     self.coordinate = coord 
     super.init() 
    } 
} 

Trả lời

53

Bạn hầu như có nó ngay! Chỉ cần thay đổi dòng này trong việc thực hiện MyAnnotation của bạn:

var coordinate : CLLocationCoordinate2D 

này:

dynamic var coordinate : CLLocationCoordinate2D 

Điều đó sẽ sửa chữa nó.

Tại sao điều này lại quan trọng? Bởi vì hoạt ảnh chú thích dựa trên KVO (quan sát giá trị quan trọng). Trong Swift, thuộc tính không phải là giá trị khóa quan sát trừ khi nó được đánh dấu là dynamic. (Để có thêm một chút kỹ thuật, điều đó lần lượt là bởi vì quan sát KVO hoạt động bằng cách thực hiện phương thức setter thuộc tính - thời gian chạy đến ngay trong lớp của bạn và thay đổi mã setter của thuộc tính. Nhưng trong Swift, nó không thể làm điều đó trừ khi bạn đánh dấu rõ ràng thuộc tính là dynamic.)

Các vấn đề liên quan