我已经MKAnnotatonView
继承并覆盖了initWithAnnotation:resueIdentifier
anddrawRect
方法以在“正面”图像后面添加另一个图像。
似乎这就是 Apple 的MKAnnotationView
类参考建议我们做的事情。
只是它很棘手。如果您将 子类化MKAnnotationView
,则仍然存在 image 属性。他们已经做了一些适当的事情,以便与绘图联系起来。也许,他们已经覆盖了 drawRect 以在初始化完成后绘制图像。
此外,如果您不设置图像属性,则自定义的框架将annotationView
设置为大小 0,并且drawRect
不会调用该方法。
最后,Apple 表示图像应该被完全填充,即使用透明颜色作为绘图的背景。
所以:在你的子类中:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self)
{
UIButton *rightButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(myShowAnnotationAddress:)
forControlEvents:UIControlEventTouchUpInside];
self.rightCalloutAccessoryView = rightButton;
self.canShowCallout = YES;
self.multipleTouchEnabled = NO;
self.frame = CGRectMake(0, 0, 65, 100);
self.backgroundColor = [UIColor clearColor];
return self;
}
return nil;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGPoint drawPoint = CGPointMake(0.0f, 0.0f);
UIImage *shadowImage = [UIImage imageNamed:@"shadow_image.png"];
[shadowImage drawAtPoint:drawPoint];
UIImage *frontImage = [UIImage imageNamed:@"front_image.png"];
[frontImage drawAtPoint:drawPoint];
CGContextRestoreGState(context);
}
等我回答完,我才知道你其实是想拖后腿的MKPinAnnotationView
。我的回答不是这样,尽管它显示了可能应该在哪里绘制。显然MKPinAnnottions
有自己的绘制方法来呈现 Pin 及其阴影。
我认为您可能可以从 self.image 属性中检索 Pin 图像。至于阴影,我不确定……可能是使用OPEN GL绘图方法添加阴影,或者只是组合一个阴影图像。
最后,图像带有动画。我猜那是动画运行的地方。不过,在这个阶段,我还没有测试过。