비디오: 아이폰 사용자라면 이 기능은 적어도 알아야 하지 않을까? 아이폰의 최애기능! 단축어로 지정문자 보내기~ (feat. 안심문자(?) 보내는 법) 2024
MKAnnotation 프로토콜을 준수하는 iOS 앱의 객체는 Annotation 객체입니다. 일반적으로 Annotation 객체는 애플리케이션 모델의 기존 클래스입니다. Annotation 오브젝트의 작업은, 콜 아웃에 표시되는 텍스트와 함께,지도상의 위치 (좌표)를 인식하는 것입니다.
MKAnnotation 프로토콜에는 좌표 속성을 구현하기 위해 해당 프로토콜을 채택하는 클래스가 필요합니다. 또한 선택적으로 title 및 subtitle 속성을 구현할 수 있습니다. 이 경우 해당 텍스트는 사용자가 주석을 탭하면 주석 설명 선에 표시됩니다.
@property (nonatomic, readwrite ) CLLocationCoordinate2D 좌표 -> 주석은 프로토콜에 의해 다음 코드에서 속성을 굵게 표시해야합니다. @property (nonatomic, readwrite, copy ) NSString * title; @property (비 원자 론, 읽기 쓰기, 사본 ) NSString * 부제;
그게 전부입니다. 이미 속성을 가지고 초기화했습니다.
관심 분야가 주석이되기를 원합니다.
주석을 작성하려면 개체로 돌아 가야하지만, 먼저 다음 단계에 따라 모델 클래스 그룹에 Annotation 클래스를 추가해야합니다.
-
프로젝트 탐색기에서 모델을 선택하십시오 Classes 그룹을 선택한 다음, 오른쪽 클릭하여 나타나는 메뉴에서 New File을 선택하거나 주 메뉴에서 File → New → File을 선택하거나 (⌘ + N을 눌러) New File 대화 상자를 엽니 다.
-
대화 상자의 왼쪽 열에서 iOS 제목 아래에서 Cocoa Touch를 선택하고 오른쪽 상단 창에서 Objective-C 클래스 템플릿을 선택한 후 다음을 클릭하십시오.
파일 옵션을 선택할 수있는 대화 상자가 나타납니다.
-
클래스 필드에 주석을 입력하십시오.
-
하위 클래스 필드에 NSObject를 선택하거나 입력 한 후 다음을 클릭하십시오.
iPad 용 대상 및 사용자 인터페이스 용 XIB 사용 확인란은 여기에 관련이 없기 때문에 흐리게 표시됩니다. 이벤트는 NSObject에서 파생되며 모든보기 컨트롤러 유형에서 파생되지 않습니다.
-
나타나는 저장 시트에서 작성을 클릭하십시오.
다음으로 주석에 필요한 코드를 추가해야합니다.
Annotation에 굵게 표시된 코드를 추가합니다. h.
#import #import @interface 주석: NSObject @property (nonatomic, readwrite) CLLocationCoordinate2D 좌표; @property (nonatomic, readwrite, copy) NSString * title; @property (nonatomic, readwrite, copy) NSString * 부제; -d
일반적인 Annotation 클래스를 사용하여 관심 장소를 표시합니다.앱을 빌드 할 때 관심 장소 및 기타 정보에 대한 추가 정보를 포함하고 PointofInterest 클래스를 만들 수 있습니다.
그러면 서브 클래스 Annotation으로 만들 수 있습니다. 주석에는 표준 콜 아웃 버블의 오른쪽과 왼쪽에 각각 표시되는 오른쪽 및 왼쪽 콜 아웃 액세서리보기가있을 수 있습니다.
설명 선보기는 일반적으로 주석에 대한 자세한 정보로 연결하는 데 사용됩니다. 또한 EventController와 같은 항목에 연결하여 PointofInterest에 대한 정보를 표시 할 수 있습니다. 생각을위한 음식.
#import "여행.h"#import "목적지.h"#import "이벤트.h" #import "주석.h" @interface Trip () @property (강한, 비 원자력) NSDictionary * destinationData; @property (strong, nonatomic) 대상 * 대상; @property (strong, nonatomic) 이벤트 * 이벤트; @property (강하고 비 구조) NSMutableArray * pois; -d
이제 Listing 17-11의 굵게 표시된 코드를 Trip의 initWith DestinationIndex:에 추가 할 수 있습니다. 엠. 이것은 plist (관심 장소)의 관심 지점 데이터를 주석 (좋아, 단지 하나)으로 변환하고 목적지를 주석으로 추가하여 부팅합니다.
- (id) initWithDestinationIndex: (int) destinationIndex {self = [super init]; if (self)) {NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "대상"ofType: @ "plist"]; NSDictionary * 대상 = [NSDictionary dictionaryWithContentsOfFile: filePath]; NSArray * destinationsArray = [대상 객체의 키: @ "대상 데이터"]; _destinationData = [destinationsArray objectAtIndex: destinationIndex]; _destination = [[대상 할당] initWithDestinationIndex: 대상 인덱스]; events = [[Events alloc] initWithDestinationIndex: destinationIndex]; NSArray * poiData = self. destinationData [@ "POIs"]; _pois = [[NSMutableArray alloc] initWithCapacity: [poiData count] +1];
addObject: self. 목적지]; for (poiData의 NSDictionary * aPOI) { Annotation * annotation = [[Annotation alloc] init]; CLLocationCoordinate2D 좌표; 좌표. 위도 = [aPOI [@ "Latitude"] doubleValue]; 좌표. 경도 = [aPOI [@ "Longitude"] doubleValue]; 주석. 좌표 = 좌표; 주석. title = aPOI [@ "Title"]; 주석. 자막 = aPOI [@ "자막"]; [자기. pois addObject: 주석]; } } return self;}
poiData 배열의 각 관심 지점에 대한 주석을 작성하고 작성한 배열에 추가합니다. 지도에 표시하려는 주석
면밀히 살펴보면 Destination이 Pois 배열에도 추가되고 있음을 알 수 있습니다. 그렇게하면지도에지도가 표시됩니다.
Trip이 주석 (및지도 제목)을 반환 할 수 있도록 인터페이스에 몇 가지 새로운 메소드를 추가해야합니다. 또한 Tripinterface를 업데이트해야합니다. 그렇게하려면 굵게 표시된 코드를 Trip에 추가하십시오. h.
@interface Trip: NSObject - (UIImage *) destinationImage; - (NSString *) destinationName; - (CLLocationCoordinate2D) destinationCoordinate; - (id) initWithDestinationIndex: (int) destinationIndex; - (NSString *) 날씨; - (NSUInteger) numberOfEvents; - (NSString *) getEvent: (NSUInteger) 인덱스;
- (NSArray *) createAnnotations; - (NSString *) mapTitle; -d 이제 MapController에서 사용할 모든 Trip 메소드를 추가합니다.먼저 createAnnotations 메소드를 Trip에 추가합니다. 엠.
- (NSArray *) createAnnotations {자신을 반환합니다. pois;}
pois는 가변 배열이지만, 필요한 모든 것이 있기 때문에 기본 배열로 반환합니다. MapController는 주석을 추가하지 않습니다.
지도 제목을 반환하는 메소드도 추가해야합니다. Trip에 maptitle 메소드를 추가하십시오. 엠.
- (NSString *) mapTitle {return self. 목적지. destinationName;}