2016-09-24 24 views
0

내가MKZoomScale와 크기 조정 MKAnnotationView - 2.0

크기를 조정할 수있을 것이다 주석 나는 이미지를 포함하는 사용자 정의 내가

class MapAnnotation: NSObject, MKAnnotation { 
    var coordinate: CLLocationCoordinate2D 
    var image: UIImage? = UIImage(named: "image") 

    init(coordinate: CLLocationCoordinate2D) { 
     self.coordinate = coordinate 
    } 
} 

를 만들어 주석과 annotationView을 만들려고 노력하고있어 신속한.

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if let annotation = annotation as? MapAnnotation { 
     var pin = mapView.dequeueReusableAnnotationViewWithIdentifier("myCustomAnnotation") 
     if pin == nil { 
      pin = MKAnnotationView(annotation: annotation, reuseIdentifier: "myCustomAnnotation") 
     } 
     pin!.image = annotation.image 
     return pin 
    } 
    return nil 
} 

mapView의 크기를 조정할 때 MKAnnotationView의 크기가 조정되기를 원합니다.

MKOverlayRenderer에는 zoomScale : MKZoomScale 매개 변수가 포함 된 drawMapRect(mapRect: MKMapRect, zoomScale: MKZoomScale, inContext context: CGContext) 함수가 있다는 것을 알고 있습니다.

는 또한 나는이 솔루션 보았다

let zoomScale: MKZoomScale = mapView.bounds.size.width/
     CGFloat(mapView.visibleMapRect.size.width) 

를하지만하여 drawMapRect 함수에서 MKZoomScale에 대한 액세스 권한이 아닌 사용자 정의 방식을 원한다.

즉 MKOverlayRenderer를 MKAnnotationView 대신 만들 필요가 있습니다. MKOverlay가지도에 그리기 때문에지도에 그려지지 않은 annotationView를 만들고 싶습니다.

그 후에 MKZoomScale을 MKZoomScale 1에서 0.25 사이의 크기로 조정하려는 MKZoomScale과 MKZoomScale이 0.25보다 작 으면 annotationViews가 사라질 것입니다.

도와 주셔서 감사합니다.

답변

0

당신 수있는지도보기의 지역 VAR에 스팬에서 "줌"양을 얻을 :

mapView.region.span 

그런 다음 viewForAnnotation 기능, 당신은 주석을 확장하거나 주석이 할 수있는 몇 가지 수학을 할 수 어떤 종류의 기능 자체는 더 큰 것을 표시합니다. 지도는 범위를 업데이트 할 때

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
<pin init methods> 
let averageSpan = mapView.region.span.x * mapView.region.span.x * 0.5 
let pinScale = someFunctionToReturnScaleBasedOnAverageSpan(averageSpan) 
pin.scaleSelf(pinScale) 
return pin 

}

난 내 머리 위로 떨어져 기억하지 않지만, viewForAnnotation 경우 호출되지 않습니다, 당신은 제거 업데이트 기능의 일종 필요 특수 효과를 추가합니다.

그러나 MKOverlay를 사용하는 것이 더 쉽습니다. (: MKMapRect, zoomScale : MKZoomScale, inContext 컨텍스트 : CGContext mapRect)` 당신에게 내가 사용하려는 기본 zoomScale을 제공

+0

는 MKZoomScale 함수 에'drawMapRect 그냥 때문이다. MKCoordinateSpan을 사용하려면 이미 사용하고 있습니다. 당신은'drawMapRect' 함수를 사용하고'zoomScale'을 출력 할 수 있습니다. 그리고 이것으로 여러분은 제가 말하고자하는 것을 볼 수 있습니다. – KillerDeveloper