2015-04-21 15 views
20

Swift'de iOS 8'de MapKit'i kullanırken, özel bir ek açıklamanın harita konumunda bir değişikliği canlandırmayı nasıl mümkün kılabilirim? Bunu söylüyorum: ann özel bir açıklama, MyAnnotation olanAnimate MapKit ek açıklama koordinatını Swift'de değiştirmek mi istiyorsunuz?

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

.... Ek açıklama, yeni koordinat pozisyonuna, animasyon yapmamaktır.

Rahatsız edici olan şey, Animation-Objected-C içinde MyAnnotation yazdığımda animasyonun mükemmel şekilde çalıştığıdır (). Ama eğer Swift’e yazarsak, animeyi artık alamıyorum!

Bilginize, burada MyAnnotation benim Swift kodu:

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

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

cevap

53

Neredeyse sağ var! Sadece MyAnnotation uygulanmasında bu satırı değiştirin: Buna

var coordinate : CLLocationCoordinate2D 

: çözecektir

dynamic var coordinate : CLLocationCoordinate2D 

.

Bu neden önemlidir? Ek açıklama animasyonu KVO'ya dayanır (anahtar değeri gözlemleme). Swift'de, bir özellik dynamic olarak işaretlenmedikçe gözlenebilir bir anahtar değer değildir. (Biraz daha teknik olmak gerekirse, KVO gözlemi, özellik belirleyici metodunun uygulanmasını yavaşlatmakla işe yarayacaktır - çalışma zamanı, sınıfınıza doğru uzanır ve mülkün belirleyici kodunu değiştirir. Ancak Swift'de bunu yapamazsınız. Açıkça özelliği dynamic olarak işaretlemedikçe.)

İlgili konular