私には習慣がありますMKAnnotationView
。そのsetselected:animated
方法では、ペン先からロードされたカスタム バブルを追加し、このビューを含めるように注釈ビューのフレームを調整し、このように注釈円を他の色で再描画します (最初 - 選択されていない、2 番目 - 選択されている、青 - フレーム、緑 - アルファ = 0.8 のカスタム バブル ビュー、赤 - 注釈ビュー):
正常に動作し、バブルが表示され、その外側をタップするだけで「閉じる」ことができます (これがフレームを増やした理由です)。このバブルにはいくつかのボタンがあり、マップだけの注釈の下に何もない場合はクリックできます。
しかし、吹き出しの下に別の注釈がある場合は、吹き出し全体をクリックして「スルー」できます。ボタンの 1 つをタップすると、タップのハイライトが表示されますが、別の注釈が選択されてしまいdidSelectAnnotationView
ます...
バブルを不透明/半透明にしようとしましたが、うまくいきませんでした。ビュー自体で、ボタンにexclusiveTouchを設定すると、うまくいきません。フレームをいじらないようにしましたが、それでもクリックスルーできます。何か不足していますか?
ありがとう
編集:より短い:この UIView の下に他の MKAnnotationView がある場合、 MKAnnotationView にUIView
追加されたものをクリックできるのはなぜですか?addSubview
詳細 :
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
if(selected)
{
initialFrame = self.frame; // save frame and offset to restore when deselected
initialOffset = self.centerOffset; // frame is correct for a circle, like {{2.35, 1.47}, {12, 12}}
if (!self.customCallout)
{
self.customCallout = [[[NSBundle mainBundle] loadNibNamed:@"CustomCallout" owner:self options:nil] objectAtIndex:0];
}
// adjust annotationview's frame and center
// callout is 200x120, here frame is {{2.35, 1.47}, {200, 132}}
self.customCallout.layer.cornerRadius=5;
self.customCallout.exclusiveTouch = YES;
[self addSubview:self.customCallout];
}
...
}
initWithAnnotation
これらがあります:
self.canShowCallout = NO; // to appear the subview
self.exclusiveTouch = YES; // ...
self.enabled = YES;
self.opaque = YES;