2017-11-13 1 views
1

addOverlay 및 rendererForOverlay를 사용하여 MKMapView에서 MapKit 문제가 발생합니다. 테스트 및 디버깅은 Xcode 9.1 (9B55)가 장착 된 장치 (iPhone 7 iOS 11.1.1)에서 수행됩니다. 오버레이 렌더러는지도보기 (drawMapRect에 초당 2500 통화)의 모든 타일에 대해 반복적으로 새로 고쳐집니다. 렌더러에 대한 호출은 setNeedsDisplayInMapRect :에서 변경된 사각형을 무시하고 있으며 setNeedsDisplayInMapRect에 의해 초기화되지 않습니다. 이 새로 고침은 앱이 160 % 이상의 CPU를 사용하는 Xcode보고로 모든지도 업데이트가 완료된 후에도 영원히 계속됩니다.MapKit iOS rendererForOverlay 컨트롤이 새로 고침 됨

Xcode Debug Navigator Image Link

MKMapView 코드는 https://developer.apple.com/library/content/samplecode/Breadcrumb/Introduction/Intro.html에서 사용할 수있는 애플의 샘플 코드 '이동 경로'를 기반으로합니다. 이 코드에는 중요한 구조적 변경이 없습니다. 경험이 있거나 다른 해결책을 찾고자하는 사람이 있습니까?

+2

발견 한 항목을 공유해 주셔서 감사합니다. 질문을 질문으로 삼아 해답을 아래에 게시하십시오. 그것은 [자신의 질문에 대답해도 괜찮습니다.] (https://meta.stackexchange.com/a/132887/159251), 형식을 따라야합니다. –

답변

1

Apple Breadcrumb 샘플을 실행해도 동일한 문제가 발생하지 않았습니다. 이것을 다시 내 프로젝트에 넣고 내 프로젝트의 변경 사항을 추가 한 후에 마침내 문제를 drawMapRect :에 'self.alpha = 0.5'를 삽입하는 것으로 분리 할 수있었습니다. alpha 속성이 1.0 또는 다른 값으로 설정되어 있는지 여부는 문제가되지 않지만 문제는 계속 발생합니다. 어떤 통화가지도 업데이트없이 발생하지 않으며 setNeedsDisplayInMapRect 호출로 초당 40과 80로 복귀 문제 해결 오버레이 렌더러 통화와

- (void)drawMapRect:(MKMapRect)mapRect 
      zoomScale:(MKZoomScale)zoomScale 
      inContext:(CGContextRef)context; 
{ 
    CrumbPath *crumbs = (CrumbPath *)(self.overlay); 
    self.alpha = 0.5;  // <-------- THE PROBLEM 

:.

관련 문제