Apple의 WeatherMap 프로젝트와 마찬가지로 MKAnnotationView에서 새 클래스를 파생해야하지만 그래픽 부분은 NIB 파일로 정의됩니다.이 방법이 있습니까? 새 컨트롤러를 만들어야합니까?MKAnnotationView 파생 및 NIB 파일에 연결
답변
한 가지 방법은 펜촉에서 뷰를로드 한 다음 뷰를 하위 뷰로 MKAnnotationView에 추가하는 것입니다. 새 컨트롤러를 만들 필요는 없습니다.
먼저, NIB의 사용자 정의보기로드거야되는 속성과의 MKAnnotationView 서브 클래스 생성 :이 클래스의 초기화 방법, 그리고
@interface MapAnnotationView : MKAnnotationView
@property (nonatomic, retain) IBOutlet UIView* loadedView;
을 펜촉을로드하고 하위 뷰로 추가를 :
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString*)reuseIdentifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
if (self != nil)
{
[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil];
if (loadedView){
[self addSubview:loadedView];
}
}
return self;
}
마지막으로 MyCustomView NIB를 UIView로 만듭니다. 파일 소유자에게 위의 MapAnnotationView 클래스를 만들고 위에 정의 된 IBOutlet에 뷰를 첨부합니다.
그게 전부입니다.
Aidan 솔루션의 한 가지 문제점은 펜촉에서 뷰를로드 한 다음 사용자 지정 AnnotationView
의 하위 뷰로 추가한다는 것입니다. 이렇게하면 맵보기에서 작성한 모든 보이는 주석에 대한 추가보기가 메모리에 저장됩니다. 주석이 하나만있는 경우 문제가되지 않을 수도 있습니다. 그러나지도에 수십 개의 주석이 동시에있는 경우 해당 솔루션은 메모리와 GPU 렌더링 리소스가 약간 낭비됩니다.
단순하고 효율적인 솔루션과 같이, 사용자 정의 MapAnnotationView
에 reuseIdentifier
getter 메소드를 오버라이드 (override)하는 것입니다
class MapAnnotationView: MKAnnotationView {
override var reuseIdentifier: String? {
get { return "MapAnnotationView" }
}
}
그리고 그것을이며, 뷰가 제대로 다시 얻을 것이다. 하위보기 등으로 뷰를 추가하는 트릭을 수행 할 필요가 없습니다.
이 @Yuchen에 대해 자세히 설명해 주시겠습니까? xib에서 뷰를로드하는 것을 어떻게 피합니까? MKAnnotationView를 사용하여 xib에서 만든보기를 사용하려고합니다. – KMLong
헤이 @KMLong, 미안하다. 귀하의 질문에 대답하기 위해 : 나는 xib에서 주석보기를로드하는 것을 피하지 않았다. 필자가 제안한 것은 Adian의 대답이 xib에서 별도의 하위 뷰를로드하는 것을 피하는 것입니다 : [[[NSBundle mainBundle] loadNibNamed : @ "MyCustomView"owner : self options : nil]'. –
- 1. nib 파일에 의아해 함
- 2. nib 파일에 필요한 외부 이미지
- 3. 파생 테이블에 대한 연결
- 4. Iphone : 기존 객체의 nib 파일에 무엇을해야합니까?
- 5. MKAnnotationView 및 다른 함수에 데이터 전달
- 6. NIB로드 및 연결 재설정
- 7. MKAnnotationView userLocation 핀 아이폰
- 8. MKAnnotationView 핀이 나타나지 않습니다
- 9. - (MKAnnotationView *) mapView가 호출되지 않음
- 10. 다시 그리기 MKAnnotationView
- 11. MKAnnotationView do do nothing
- 12. MKMapView없이 MKAnnotationView 사용 하시겠습니까?
- 13. MKMapView - UIWebView as MKAnnotationView
- 14. 플래시에서 MSI 파일에 연결
- 15. Entity Framework - 파생 된 엔티티와의 연결
- 16. Xcode에서 nib 파일에 사용자 지정 UIButton을 추가하려면 어떻게합니까?
- 17. 질문에 대한 NIB 파일
- 18. 모델보기 컨트롤러 + nib 파일
- 19. iPhone : 하나의 NIB 파일에 두 개의 컨트롤러를 만드는 방법은 무엇입니까?
- 20. 코코아 : NIB 파일에 링크 된 컨트롤러 클래스의 인스턴스는 무엇이 생성됩니까?
- 21. ios에서 하나의 nib 파일에 두 개의 뷰를 연결하는 방법
- 22. FFTW를 Matlab Mex 파일에 연결
- 23. 사용자 정의 MKAnnotationView 콜 아웃
- 24. MKAnnotationView 설명 선을 숨기는 방법?
- 25. nib 및 참조 구성 요소를 통해 셀로드
- 26. initWithCoder : nib 및 NSCoding에서 호출 중입니다!
- 27. "nib"및 "xib"의 약자는 무엇입니까?
- 28. 데이터 세트를 rdlc 파일에 연결
- 29. 루비의 외부 파일에 연결 하시겠습니까?
- 30. 원격 서버의 dBase 파일에 연결
안녕하세요, Aidan! 귀하의 코드를 시도하고 내가 얻은 것은 _loadedView_와 같은 핀 주석입니다. nib 파일에서로드 된 주석 뷰 (핀에 접촉 할 때 나타나는 주석 뷰)를 가질 수 있습니까 ?? 감사합니다. – Frade
예, 저의 예는이를 지원합니다. 기본 연결 핀이 NIB의 UIView에 정의 된 것보다 표시되도록 잘못 연결 한 것으로 의심됩니다. –
죄송합니다. 실수입니다. 나는 그것을 적절하게 설명하지 않았다. 내가 뭘하려고하는지 Nib에서 사용자 정의 콜 아웃을로드하는 것입니다. 괜찮다면 [이 질문] (http://stackoverflow.com/questions/8945376/how-to-add-a-custom-calloutview-loaded-from-nib-file)을 확인하십시오. 감사합니다 – Frade