
Create the MKAnnotation fix and image viewer to animate the effect of the location change in the map view.
@property (nonatomic, strong) CustomAnnotation *fixAnnotation; @property (nonatomic, strong) UIImageView *annotationImage;
Add this code to the viewDidLoad() method:
// Fix annotation _fixAnnotation = [[CustomAnnotation alloc] initWithTitle:@"Fix annotation" subTitle:@"Location" detailURL:nil location:self.mapView.userLocation.coordinate]; [self.mapView addAnnotation:self.fixAnnotation]; // Annotation image. CGFloat width = 64; CGFloat height = 64; CGFloat margiX = self.mapView.center.x - (width / 2); CGFloat margiY = self.mapView.center.y - (height / 2) - 32; // 32 is half size for navigationbar and status bar height to set exact location for image. _annotationImage = [[UIImageView alloc] initWithFrame:CGRectMake(margiX, margiY, width, height)]; [self.annotationImage setImage:[UIImage imageNamed:@"mapannotation.png"]];
Now you need to delete the image when you drag the map view and add an image that looks like an annotation. And after completing this, add an annotation and remove the image from the map view.
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated { NSLog(@"Region will changed..."); [self.mapView removeAnnotation:self.fixAnnotation]; [self.mapView addSubview:self.annotationImage]; } - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { NSLog(@"Region did changed..."); [self.annotationImage removeFromSuperview]; CLLocationCoordinate2D centre = [mapView centerCoordinate]; self.fixAnnotation.coordinate = centre; [self.mapView addAnnotation:self.fixAnnotation]; }
source share