Я пытаюсь сделать пользовательское представление аннотации путем разделения на подклассы MKAnnotationView
и переопределение drawRect
метод. Я хочу, чтобы представление было оттянуто смещение из положения аннотации, несколько как MKPinAnnotationView
это, так, чтобы точка контакта в указанных координатах, а не середина контакта. Таким образом, я установил положение кадра и размер как показано ниже. Однако не похоже, что я могу влиять на положение кадра вообще, только размер. Изображение заканчивает тем, что было оттянуто центрируемое по положению аннотации. Какие-либо подсказки относительно того, как достигнуть того, что я хочу?
MyAnnotationView.h:
@interface MyAnnotationView : MKAnnotationView {
}
MyAnnotationView.m:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) {
self.canShowCallout = YES;
self.backgroundColor = [UIColor clearColor];
// Position the frame so that the bottom of it touches the annotation position
self.frame = CGRectMake(0, -16, 32, 32);
}
return self;
}
- (void)drawRect:(CGRect)rect {
[[UIImage imageNamed:@"blue-dot.png"] drawInRect:rect];
}
Вместо подкласса MKAnnotationView вы пробовали использовать общий MKAnnotationView и установить свойства image
и centerOffset
?
Я пробовал использовать centerOffset, и по какой-то причине изображение было в правильном положении при увеличении, но когда вы увеличивали масштаб карты, изображение сдвигалось с того места, где оно должно было быть. Исправлением этого была установка рамки изображения со смещением. Вот код, который я использовал (вы можете опустить выноски, если у вас нет выноски), я использовал контакты из здесь )
#pragma mark MKMapViewDelegate
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if(![annotation isKindOfClass:[MyAnnotation class]]) // Don't mess user location
return nil;
MKAnnotationView *annotationView = [aMapView dequeueReusableAnnotationViewWithIdentifier:@"spot"];
if(!annotationView)
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"spot"];
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[(UIButton *)annotationView.rightCalloutAccessoryView addTarget:self action:@selector(openSpot:) forControlEvents:UIControlEventTouchUpInside];
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
annotationView.centerOffset = CGPointMake(7,-15);
annotationView.calloutOffset = CGPointMake(-8,0);
}
// Setup annotation view
annotationView.image = [UIImage imageNamed:@"pinYellow.png"]; // Or whatever
return annotationView;
}
Настройте centerOffset и calloutOffset, чтобы они соответствовали вашему изображению, и желаемая центральная точка, и точка выноски.