Czy wiesz, że MKPinAnnotationView ma metodę "animatesDrop" do animowania adnotacji pin z góry do punktu na mapie z cieniem? OK, czy to możliwe z niestandardowym obrazem?Czy można wywołać animatesDrop w MKAnnotationView zamiast MKPinAnnotationView?
8
A
Odpowiedz
20
Zawsze można wykonać niestandardową animację w metodzie MKMapViewDelegate.
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
Prawdopodobnie coś takiego (nie dostanie fantazyjne animacji cień, jeśli chcesz to trzeba to zrobić samemu):
- (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
CGRect visibleRect = [mapView annotationVisibleRect];
for (MKAnnotationView *view in views) {
CGRect endFrame = view.frame;
CGRect startFrame = endFrame; startFrame.origin.y = visibleRect.origin.y - startFrame.size.height;
view.frame = startFrame;
[UIView beginAnimations:@"drop" context:NULL];
[UIView setAnimationDuration:1];
view.frame = endFrame;
[UIView commitAnimations];
}
}
1
Dzięki @gcamp za odpowiedź, to działa porządku, ale zmodyfikować go trochę za dokładne dla gdzie widok zostanie zrzucona na MapView, sprawdź poniższy kod:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
CGRect visibleRect = [mapView annotationVisibleRect];
for (MKAnnotationView *view in views)
{
CGRect endFrame = view.frame;
endFrame.origin.y -= 15.0f;
endFrame.origin.x += 8.0f;
CGRect startFrame = endFrame;
startFrame.origin.y = visibleRect.origin.y - startFrame.size.height;
view.frame = startFrame;
[UIView beginAnimations:@"drop" context:NULL];
[UIView setAnimationDuration:0.2];
view.frame = endFrame;
[UIView commitAnimations];
}
}
3
samą odpowiedź jak @gcamp tylko w Swift dla zainteresowanych
func mapView(mapView: MKMapView, didAddAnnotationViews views: [MKAnnotationView]) {
let visibleRect = mapView.annotationVisibleRect
for view:MKAnnotationView in views{
let endFrame:CGRect = view.frame
var startFrame:CGRect = endFrame
startFrame.origin.y = visibleRect.origin.y - startFrame.size.height
view.frame = startFrame;
UIView.beginAnimations("drop", context: nil)
UIView.setAnimationDuration(1)
view.frame = endFrame;
UIView.commitAnimations()
}
}
Powiązane problemy
- 1. MKPinAnnotationView offset obrazu?
- 2. Jak programowo otworzyć wywołanie MKAnnotationView? (iPhone, MapKit)
- 3. Czy można wywołać metodę clearInterval() przed setInterval()?
- 4. iOS - zestaw Szczegóły Przycisk Ujawnienie na MKAnnotationView
- 5. Czy można wywołać funkcję Reflect.apply() nad Function.prototype.apply() w ECMAScript 2015?
- 6. MKPinAnnotationView: Szerokość i wysokość kołka
- 7. Czy można wywołać określoną funkcję ze sterownika w angularjs?
- 8. Czy można bezpiecznie wywołać RCW z finalizatora?
- 9. Czy można wywołać API COM z Java?
- 10. Czy można wywołać moduł Pythona z ObjC?
- 11. Czy startServce() można wywołać z dowolnego wątku?
- 12. Odśwież MKAnnotationView na MKMapView
- 13. Pozycjonowanie zwyczaj MKAnnotationView
- 14. Czy można wywołać funkcję w składniku rodzica w React Native?
- 15. Utworzenie podklasy MKAnnotationView i nadrzędnym setDragState
- 16. MKPinAnnotationView niestandardowy obraz zastępuje pin z animowanym opadem
- 17. C# czy można wywołać zdarzenie click_click za pomocą kodu?
- 18. Wykryj Stuknij w CalloutBubble w MKAnnotationView
- 19. Czy można używać LinearLayout zamiast FrameLayout?
- 20. Korzystanie z MKAnnotationView bez MKMapView?
- 21. Czy można wywołać wywołania biblioteki cufft w funkcji urządzenia?
- 22. Czy można wywołać plik .sql w migracji doktryny?
- 23. Czy można wywołać super ustawianie w odziedziczonych klasach ES6?
- 24. Czy można wywołać bibliotekę kodów w innym pliku biblioteki?
- 25. Czy można wywołać metodę nazwaną w wywołaniu Gdzie?
- 26. Czy istnieje limit określający, ile razy można wywołać funkcję navigator.geolocation.getCurrentPostion?
- 27. nie MKAnnotationView wyświetlane na mapie
- 28. Gdzie można wywołać funkcje ini_set() w klasie?
- 29. Nie można wywołać FirefoxDriver konstruktora
- 30. czy można wywołać serwlet Java z ring/compojure?
@gcamp: Mam spróbować także w ten sposób, ale nie działa (obraz nie zmienia się): MKPinAnnotationView * annView = [MapView dequeueReusableAnnotationViewWithIdentifier: ident]; annView = [[[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: ident] autorelease]; annView.image = [UIImage imageNamed: @ "annotImg.png"]; annView.animatesDrop = TRUE; – Mat
Zmieniono moją odpowiedź! – gcamp
dziękuję bardzo! .. jest to bardzo przydatne dla mnie! – Mat