2014-05-09 95 views
1

我有選擇MKAnnotationView後自定義視圖,並與我嘗試添加一個手勢識別這樣的:自定義標註手勢識別

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)selectedAnnotationView { 
    if([selectedAnnotationView.annotation isKindOfClass:[CustomPinAnnotation class]]) { 
     CustomPinAnnotation *annotation = selectedAnnotationView.annotation; 
     [selectedAnnotationView setCalloutOffset:CGPointMake(0,selectedAnnotationView.frame.size.height)]; 

     CalloutView *calloutView = [[CalloutView alloc] initWithFrame:CGRectMake(0, 0, selectedAnnotationView.frame.size.width, selectedAnnotationView.frame.size.height*2)]; 

    [selectedAnnotationView addSubview:calloutView]; 
    [UIView animateWithDuration:annotationAnimationTime animations:^{ 
     [calloutView setFrame:CGRectMake(-expandingAnnotationWidth/8, 0, [calloutView calculateWurstLenghtFromText:selectedAnnotationView.annotation.title], selectedAnnotationView.frame.size.height*2)]; 
    } completion:^(BOOL finished) { 
     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(calloutTapped:)]; 
     [calloutView addGestureRecognizer:tapGesture]; 
     [calloutView setUserInteractionEnabled:YES]; 
    }]; 
} 

在屏幕下方,你可以看到它的樣子擴大,而不是: enter image description here

的問題是,手勢識別僅適用於顯着的區域,而不是對整個標註:

enter image description here

我可能知道發生了什麼 - 我添加子視圖到MKAnnotation這是很小的。但如何解決這個問題?還有另一種繪製標註的方法,或者我可以擴展可點擊區域。

回答

0

您的註釋框架可能太小。即使您將標註設置得足夠大,其父標註本身也很小。有同樣的問題,它解決它真的很混亂。

如果你不想惹框架和選擇的狀態,也因爲你已經在使用被添加自定義視圖,你爲什麼不執行以下操作:

  • 添加自定義標註鑑於作爲一個完全新的/不同的註釋/覆蓋時註釋被選中(而不是像現在這樣子視圖)
  • 刪除它當你的註釋取消

你只需要正確定位並不會甚至需要一個手勢識別器。

1

1Maybe你可以嘗試改變這一點:

CalloutView *calloutView = [[CalloutView alloc] initWithFrame:CGRectMake(0, 0, selectedAnnotationView.frame.size.width, selectedAnnotationView.frame.size.height*2)]; 

要這樣:

CalloutView *calloutView = [[CalloutView alloc] initWithFrame:CGRectMake(0, 0, 150, 150)]; 

,看看它是否工作,因爲我有一種感覺,annotationView.frame太小,並設置您的calloutView只是爲了這個小區域。如果它是硬編碼的,它可能會起作用。

+0

但框架是正確的 - 我看到正確繪圖。除了這個框架被改變與下面提到的動畫幾行。 – Kuba

+0

只需登錄您的calloutView.frame並檢查其值。我可能是錯的,但之前我有過類似的問題,這是造成它的原因。我會看看可能的代碼,看看我如何設法處理這個tapGesture – Pancho

+0

我記錄它:'frame =(-25 0; 270 120);'在動畫之後。是正確的大小。 – Kuba