drawRect не вызывается в подклассе MKPinAnnotationView - PullRequest
1 голос
/ 13 апреля 2011

Я реализовал класс, который расширяет MKPinAnnotationView. Я хочу нарисовать что-то под булавкой, чего я надеюсь достичь, приняв сообщение drawRect: rect. Я хочу сделать это, сначала нарисовав что-нибудь сам, а затем приковав цепью к суперклассу.

Проблема в том, что это сообщение не отправляется. Я уже пытался установить размер кадра на что-то не пустое или нулевое (классическая причина) без какого-либо эффекта. Может ли реализация MKPinAnnotationView каким-то образом заставить сообщение drawRect: rect не отправляться подклассам?

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface QueryAnnotationView : MKPinAnnotationView {
}
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString    *)reuseIdentifier;
@end

Реализация:

#import "QueryAnnotationView.h"
@implementation QueryAnnotationView
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier;
{
    self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
    if (self)
    {
        self.frame = CGRectMake(0, 0, 65, 100);
    }
    return self;
}
- (void)drawRect:(CGRect)rect
{
    NSLog(@"drawing my own stuff..");
    [super drawRect:rect];
}
@end

1 Ответ

2 голосов
/ 22 марта 2012

Попробуйте:

в вашем (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier

добавить эти две строки в конце блока if (self):

self.backgroundColor = any color but clear color (e.g. redColor)
self.backgroundColor = [UIColor clearColor];

Это работает на моемкод, но я не знаю почему.

Кроме того, вы можете попробовать это:

- (void)setAnnotation:(id <MKAnnotation>)annotation
{
    [super setAnnotation:annotation];
    [self setNeedsDisplay];
}
...