所以我正在使用iOS Mapkit
,部分应用程序要求我很久以前就会显示一个注释,当有人点击它时。到目前为止,我已经尝试过这个:
//MARK: Report Date And Time Details
let ReportTime = NSDate()
let TimeStamp = NSDateFormatter()
TimeStamp.timeStyle = NSDateFormatterStyle.ShortStyle
TimeStamp.dateStyle = NSDateFormatterStyle.ShortStyle
TimeStamp.stringFromDate(ReportTime)
然后将注释的描述设置为Report Time
。而不是这样做,我希望注释说“53,54,55分钟前等”有没有一种简单的方法来实现这一目标?
全部谢谢!
答案 0 :(得分:1)
两件事:
为了节省时间,我建议使用NSDateComponentsFormatter
:
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Hour, .Minute]
formatter.unitsStyle = .Full
let string = formatter.stringFromDate(date1, toDate: date2)
生成一个看起来像的字符串:
2小时1分钟
如果您只是希望标注显示已用时间,最简单的方法是使用title
(或subtitle
的计算属性定义自定义注释,无论您喜欢哪个) 。例如:
class CustomAnnotation: NSObject, MKAnnotation {
let startDate = NSDate()
var coordinate: CLLocationCoordinate2D
var subtitle: String?
init(coordinate: CLLocationCoordinate2D) {
self.coordinate = coordinate
super.init()
}
var title: String? {
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Hour, .Minute]
formatter.unitsStyle = .Full
let elapsedString = formatter.stringFromDate(startDate, toDate: NSDate())!
return "Added \(elapsedString) ago"
}
}
注意,这里的关键是我使用的是计算属性,而不是title
的{{1}}存储属性。这确保了每次出现标注时,它都会重新检索属性,MKPointAnnotation
将重新计算经过时间的相应字符串表示。
显然,您可以根据需要更改此选项(例如,NSDateComponentsFormatter
实际上只是在创建注释时,或者是您可以从数据源设置的存储属性;您可以将初始化程序更改为传递额外的属性;等),但这说明了基本的想法。