이 질문은 이전에 다른 사람들이 물어 보았지만 이전에이 포럼에서 읽었지만 지금까지 행운을 빌지 않고 제안한 방법을 시도해 보았습니다. 이 질문.viewForAnnotation이 호출되지 않았습니다. (iOS noob)
아래 코드는 MKMapView의 핀 아이콘을 변경하기위한 것입니다. 그러나 viewForAnnotation 함수는 MKMapView에 의해 호출되는 것조차 보이지 않습니다. 사람들은 .xib 파일의 맵보기를 파일 소유자로 드래그하거나 myMap.delegate = self를 정의하여 파일의 소유자에게 기능을 위임 할 때 몇 가지 문제가 있다고 말했다. 나는 두 가지 방법을 모두 마쳤지 만 여전히 아무것도 얻지 못합니다.
정말 내 문제에 대한 도움을 주셔서 감사합니다, 감사합니다.
CODE :
- (MKPinAnnotationView*)myMap:(MKMapView*)myMap viewForAnnotation:(id<MKAnnotation>)annotation{
MKPinAnnotationView *pin = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomPin"];
UIImage *icon = [UIImage imageNamed:@"bustour.png"];
UIImageView *iconView = [[UIImageView alloc] initWithFrame:CGRectMake(8,0,32,37)];
if(icon == nil)
NSLog(@"image: ");
else
NSLog(@"image: %@", (NSString*)icon.description);
[iconView setImage:icon];
[pin addSubview:iconView];
pin.canShowCallout = YES;
pin.pinColor = MKPinAnnotationColorPurple;
return pin;
}
위임하여 .h
클래스
바로 그 자리에서 @Anna에게 감사한다! 여기에 여전히 질문이 있습니다. 괜찮 으면 내 코드에서 기본적으로 mapView를 myMap이라는 이름으로 코드에 표시했습니다. 위임 메소드가 왜 정의하지 않았거나 생성하지 않은 mapView에서 왔습니까? 어디에서 왔습니까? –
대리자 메서드 이름은 MKMapViewDelegate 프로토콜에 필요합니다. Objective-C 규칙에 따라 해당 프로토콜을 준수하기 때문에 그에 따라 메서드의 이름을 지정해야합니다. 모든지도보기 개체는 이름에 관계없이 대리인 메서드 이름 (위임/프로토콜 계약 - 작동 방식 또는 언어 디자인 방식)을 찾습니다. 앞에서 말했듯이 내부 매개 변수의 이름은 원하는대로 변경할 수 있습니다. 메소드 외부에있는 오브젝트의 이름을 일치시킬 필요조차 없습니다. – Anna
지도보기 개체가 해당 대리자 메서드를 호출하면 첫 번째 매개 변수로 자신에 대한 참조를 전달합니다. 이 메소드에서 매개 변수 이름은 아무 것도 될 수 있지만 호출 한 맵보기 오브젝트를 여전히 참조합니다. 여전히 명확하지 않은 경우 Objective-C 또는 프로토콜 소개 (developer.apple.com에는 좋은 설명서가 있음)를 읽을 수 있습니다. – Anna