이상한 행동을 통해 머리를 부러 뜨 렸습니다. IOS 10의 MKMapView에 MKPointAnnotation을 표시하려고 할 때주의를 기울이고 있습니다. StackOverflow에서 2 개의 관련 게시물을 발견했지만 실제로는 그렇지 않습니다. 내가 직면하고있는 문제에 대한 해답.iOS swift : MKPointAnnotation이 항상 제목을 표시하지 않음
- https://stackoverflow.com/questions/36760810/mkmapview-annotation-title-is-not-showing하지만이 모든 해답을 가지고 있지 않으며, 내 경우에 나타나지 않으면하지만 이상한 해결과 동시에 제목이 표시 결코 여기에 같은 문제는 약간 다른 것 같다 그들은이다.
- https://stackoverflow.com/questions/33818285/ios-mapview-annotations-not-showing-for-pins하지만 사용자가 실제로 제목을 설정하는 것을 잊어 버렸습니다. @rockhammer는 흥미롭지 만, 관련이 있지만 정확히는 그렇지 않습니다. '주석이 맵에 추가 될 때 .title은 문자가 하나라도 있어야합니다. "". 그렇지 않으면 .title이 ""이외의 것으로 수정 된 경우에도 레이블이 표시되지 않습니다. '
내 상황 : 사용자가지도에서 길게 누르면 어노테이션이 추가되는 기능이 있습니다. 제목은 기본적으로 CLGeocoder(). reverseGeocodeLocation (...) 조회를 사용하여 찾은 주소의 첫 번째 사용 가능한 행입니다. 모두 실패하면 단순히 날짜 만 사용하게됩니다. 제목에 텍스트가 있다는 것을 확신 할 때 주석이 끝까지 추가되는 것을 볼 수 있습니다. 이것은 위에서 언급 한 두 번째 게시물의 주석이이 상황에 맞지 않게합니다.
내 문제 : 상단 부근에 annotation.title = "BLAH"
줄이 표시됩니다. 이 줄이 없으면 주석 제목은 MKMapView에 표시되지 않지만 핀만 표시됩니다!
@IBOutlet weak var map: MKMapView!
func longPress(gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer.state == UIGestureRecognizerState.began {
let touchPoint = gestureRecognizer.location(in: self.map)
let coordinate = map.convert(touchPoint, toCoordinateFrom: self.map)
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
annotation.title = "BLAH" //WITHOUT THIS THE TITLE NEVER SHOWS
CLGeocoder().reverseGeocodeLocation(CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)) { (placemarks, error) in
if error != nil {
print(error!)
} else {
if let placemark = placemarks?[0] {
annotation.title = placemark.subThoroughfare != nil ? placemark.subThoroughfare! : ""
annotation.title = annotation.title! + (annotation.title! == "" ? "" : " ") + (placemark.thoroughfare != nil ? placemark.thoroughfare! : "")
if annotation.title == "" {
annotation.title = placemark.subLocality != nil ? placemark.subLocality! : ""
if annotation.title == "" {
annotation.title = placemark.subAdministrativeArea != nil ? placemark.subAdministrativeArea! : ""
if annotation.title == "" {
annotation.title = placemark.postalCode != nil ? placemark.postalCode! : ""
if annotation.title == "" {
annotation.title = placemark.country != nil ? placemark.country! : ""
}
}
}
}
}
}
if annotation.title == "" {
annotation.title = "Added \(NSDate())"
} //At this point a title is guaranteed to be set. Still, it never shows unless it is first 'initialised' with 'BLAH' or something at the beginning.
}
self.map.addAnnotation(annotation)
}
}
누구나 내게 논리를 표시하고 어떻게/왜 이런 일이 일어나고 있는지, 훌륭 할 것입니다.