2016-07-21 4 views
2

Итак, я работаю с iOS Mapkit, а часть приложения требует, чтобы я долго показывал аннотацию, когда кто-то нажимал на нее. До сих пор я попытался это:Как получить длинную страницу Аннотации размещены iOS

//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 минуты назад и т. Д.», Есть ли простой способ сделать это?

Спасибо всем!

+1

Попробуйте 'NSDateIntervalFormatter' – dan

ответ

1

две вещи:

  1. Чтобы время прошло, я предложил бы использовать NSDateComponentsFormatter:

    let formatter = NSDateComponentsFormatter() 
    formatter.allowedUnits = [.Hour, .Minute] 
    formatter.unitsStyle = .Full 
    
    let string = formatter.stringFromDate(date1, toDate: date2) 
    

    Это создает строку, которая выглядит как:

    2 час, 1 минута

  2. Если вы хотите, чтобы выноска отображала вам прошедшее время, самым простым способом является определение пользовательской аннотации с вычисленным свойством для 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, что вы получите с MKPointAnnotation. Это гарантирует, что каждый раз, когда отображается выноска, он повторно извлекает свойство, а NSDateComponentsFormatter пересчитывает соответствующее строковое представление прошедшего времени.

Очевидно, что вы можете изменить это, как вы считаете нужным (например, это startDate действительно только при создании аннотации, или это какое-то хранится свойство, которое можно установить из источника данных, вы можете изменить инициализатору к передать дополнительные свойства и т. д.), но это иллюстрирует основную идею.

enter image description here

+0

Давайте [продолжить это обсуждение в чате] (http://chat.stackoverflow.com/rooms/117984/discussion-between-rob-and-user154248). – Rob