在当前位置的蓝点上叠加一个透明的PNG

  • 本文关键字:一个 PNG 透明 位置 叠加 ios
  • 更新时间 :
  • 英文 :


我只是在玩苹果的CurrentAddress样本代码,我试图使用trueHeading属性来确定用户面对的方向。虽然这被证明很简单,但我想在当前位置点的顶部显示一个透明的PNG,我想旋转它以模拟指南针。

这是我目前得到的非常基本的代码:

@implementation MapViewController
@synthesize mapView, reverseGeocoder, getAddressButton;
- (void)viewDidLoad
{
    [super viewDidLoad];
    mapView.showsUserLocation = YES;
}

- (IBAction)reverseGeocodeCurrentLocation
{
    self.reverseGeocoder =
        [[[MKReverseGeocoder alloc] initWithCoordinate:mapView.userLocation.location.coordinate] autorelease];
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
    NSString *errorMessage = [error localizedDescription];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Cannot obtain address."
                                                        message:errorMessage
                                      cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];
    [alertView release];
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
    PlacemarkViewController *placemarkViewController =
        [[PlacemarkViewController alloc] initWithNibName:@"PlacemarkViewController" bundle:nil];
    placemarkViewController.placemark = placemark;
    [self presentModalViewController:placemarkViewController animated:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    // we have received our current location, so enable the "Get Current Address" button
    [getAddressButton setEnabled:YES];
    NSString *north = [NSString stringWithFormat:@"%f", self.mapView.userLocation.heading.trueHeading];
    NSLog(@"here: %@", north);
}
@end

我如何将PNG覆盖到蓝点的确切位置并保持它在那里(如果用户移动,那就是跟随点)?

关键是您需要实现mapView:viewForAnnotation:委托方法,并在其中查找不是您的注释对象。请看下面的代码片段:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation {
    NSString static *defaultID = @"defaultID";
    NSString static *userLocationID = @"userLocationID";
    if ([annotation isKindOfClass:[MyAnnotation class]]) {
        // your code here
    } else {
        MKAnnotationView *annotationView = [map dequeueReusableAnnotationViewWithIdentifier:userLocationID];
        if (!annotationView) {
            annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:userLocationID] autorelease];
            annotationView.image = [UIImage imageNamed:@"UserLocationIcon.png"];
        }
        return annotationView;
    }
}

最新更新