2014-05-09 5 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이 변경을 시도 할 수 있습니다 : 나는 annotationView.frame가 너무 작 당신을 설정한다는 느낌을 가지고 있기 때문에,

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

    을 그리고 그것은 작동하는지 확인 : 여기에

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

    을 callout이 작은 영역 만보기. 하드 코드 된 경우 작동 할 수 있습니다.

    +0

    프레임이 맞습니다. 올바르게 그 그림을 봅니다. 게다가이 프레임은 위에서 언급 한 애니메이션 커플 라인으로 변경됩니다. – Kuba

    +0

    calloutView.frame을 로깅하고 해당 값을 확인하십시오. 내가 틀렸을 수도 있지만 이전에 비슷한 문제가 있었는데 이것이 원인이었습니다. 나는 코드를 살펴보고이 tapGesture를 처리하는 방법을 살펴볼 것이다. – Pancho

    +0

    나는 그것을 기록했다 : 애니메이션 후'frame = (-25 0; 270 120);'. 맞는 크기입니다. – Kuba

    관련 문제