2012-04-06 3 views
0

버튼 막대가있는 MKMapView 기반 응용 프로그램이 있습니다. 사용자가 맵보기에서 주석을 선택하면 단추 막대에서 팝업을 표시하는 데 사용할 수있는 단추가 있습니다.MKMapView를 스크롤하는 동안 페이드 인하

지도보기의 일부만 덮어 씁니다. 사용자가 할 수 있기를 원하는 것은 사용자가지도보기의 보이는 부분을 팝업으로 스크롤 할 때입니다. 팝업 표시가 사라져지도보기가 표시되도록하려는 경우입니다. , 사용자가 스크롤을 멈 추면 잠깐 후에 popover가 다시 사라 지길 바란다.

내가보기를 정의 할 수 있음 나는 팝 오버가 끝났을 때 여전히 상호 작용할 수 있기를 원하지만 페이딩에 대해 가장 좋은 방법은 무엇인가?

덕분에, 마크

답변

1

는 사용자가지도를 드래그 할 때, 당신은 delegate on the MKMapView을 필요로 알고, regionWillChangeAnimated 및 regionDidChangeAnimated에 응답합니다. 문서에서는 드래그하는 동안 여러 번 호출 될 수 있다고 주장하지만 그럴 수는 없습니다.

그러나 this discussion of these delegate methods not being called reliably을 참조하십시오.

편집 : 원본 답변은 코어 애니메이션을 사용하여 팝업을 사라지게하는 것이 좋겠지 만 이는 가능하지 않습니다. 의견을보십시오. Popover의 contentViewController을 얻고 view을 얻고 해당보기의 alpha을 변경하더라도 레이어 계층 구조를 검색하지 않는 한 Popover는 그림자를 남깁니다. 가능한 경우 dismisspresent 대신 popover. 지연 시간을 조절하기 전에 NSTimer을 복원해야하기 때문에 Core Animation보다 덜 편리 할 수 ​​있습니다.

지도보기 위에있는 다른보기의 경우 끌기가 발생하면 Core Animation을 사용하여 팝업 아웃을 페이드 아웃 한 후 다시 다시 시작하십시오. 뷰의 지속 시간, 지연 및 이름을 조정하여 페이드가 적용되도록 조정합니다.

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; 
{ 
    [UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^ 
    { 
     [[self viewOnTopOfMapView] setAlpha:0.0]; 
    } 
    completion:nil]; 
} 

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 
{ 
    [UIView animateWithDuration:0.25 delay:2.0 options:UIViewAnimationOptionAllowUserInteraction animations:^ 
    { 
     [[self viewOnTopOfMapView] setAlpha:1.0]; 
    } 
    completion:nil]; 
} 
+0

코드 예제를 살펴 보았지만 popover에 setAlpha를 호출 할 수 있다고 생각하지 않거나 잘못된 것이 있습니까? – markab

+0

죄송합니다. 당신은'popoverController.contentViewController.view'에 접근 할 수 있지만 투명하게 만들거나 움직이면 별도의 그림자가 남게됩니다. 그 그림자는 뷰 계층에서 두 개의 뷰에 의해 생성되고 클래스는'_UIPopoverView' 클래스를 가지며 그림자는 주 계층의 첫 번째 하위 레이어에 적용됩니다. 개인적으로, 나는 그것을 망쳐 놓지 않을 것입니다. 위와 같이지도 이동을 감지하고지도 이동이 끝날 때까지 팝업을 닫으려고하면 용도에 맞게 사용할 수 있습니까? popover reapprance를 지연 시키려면 UITimer가 필요할 수도 있지만, 그렇게 간단 할 것입니다. – Dondragmer

+0

예, 아마도 좋은 대안 일 수 있습니다. 감사 – markab

관련 문제