2016-07-28 3 views
0

지도보기에서 가장 가까운 사용자 위치 핀 이미지를 변경하고 싶습니다.MKMapView 사용자의 가장 가까운 위치의 핀 이미지를 변경하는 방법은 무엇입니까?

"내 프로젝트에서지도보기에 상점 위치 중 일부를 표시합니다. 위치 (위도/경도)는 API에서 가져옵니다. 여기에서 지정된 위치 핀 이미지를 변경했습니다.하지만 제대로 작동합니다. 지도보기에서 사용자 가장 가까운 위치 핀 이미지를 변경하십시오. 이미 사용자의 현재 위치에서 위치 핀 이미지가 변경되어야하는 위치가 5 마일 미만인 특정 API 위치까지 거리 정보를 얻습니다. "

내 주석 코드는 다음과 같습니다.

// View for Annotation 핀 이미지 변경을위한 대표단 코드.

 -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation: (id<MKAnnotation>)annotation 
    { 

[self.annotationCustom_View removeFromSuperview]; 
[self.annotationCurrentLoc_View removeFromSuperview]; 

static NSString *identifier = @"myAnnotation"; 
CustomMapViewAnnotation * annotationView = (CustomMapViewAnnotation *)[self.locationsMap_View dequeueReusableAnnotationViewWithIdentifier:identifier]; 
if (!annotationView) 
{ 
    annotationView = [[CustomMapViewAnnotation alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 

    if([annotation isKindOfClass:[MKUserLocation class]]) 
    { 
     annotationView.image = [UIImage imageNamed:@"LocationsYour-Current-Location-Icon"]; // User Current Location Image 
    } 
    else 
    { 
dispatch_async(dispatch_get_main_queue(), ^{ 


     for(int i=0;i<[locations_ArrayList count];i++) 
     { 
       MapViewLocationModel *objValue=[locations_ArrayList objectAtIndex:i]; 

      float value = [objValue.kiosk_distance floatValue]; 
       if(value < 5.0) 
       { 

       annotationView.image = [UIImage imageNamed:@"LocationsFridge-Location-Icon"]; // Change the pin image which are the below 5.0 miles distance from the user current locations 

       } 
       else 
       { 
        annotationView.image = [UIImage imageNamed:@"LocationsBlackDot"];  // given api locations pin images 
       } 
     } 


    }); 
     } 
} 

annotationView.canShowCallout = NO; 

return annotationView; 

    } 

이것은 내 코드입니다. 어느 누구도이 일에 나를 도울 수 있습니까? 다음

답변

0

봅니다 : 특정지도 지역에서 핀을 표시하기 위해

먼저 다음을 수행해야 5마일 내부의 모든 핀을 얻을. 이것은 당신이 원하는 것을 달성하는 데 도움이됩니다

// 1. Set the map zoom area visible of 5 miles: 

     mapView.region = MKCoordinateRegionMakeWithDistance(
      centerCoordinate, 
      1609.344f * miles (5 in your case), 
      1609.344f * miles (5 in your case) 
     ); 

    // 2. Now get the Rect of this map area: 

     MKMapRect mRect = self.map.visibleMapRect; 

    // 3. Get the all pins inside this Rect: 

     NSSet *annotationSet = [myMapView annotationsInMapRect:mRect]; 

     // print number of annotations 
     NSLog(@"Number of annotations in rect: %d", annotationSet.count); 

     // this will return an array from the NSSet 
     NSArray *annotationArray = [annotationSet allObjects]; 

    // 4. Assign some parameter to this annotation, by taking some property in the annotation class. 

    // 5. Now in your MapView Delegate method viewForAnnotation check the parameter and do the need full with the respective pins. 

희망.