2016-07-21 10 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 Minutes Ago etc.」と言うアノテーションが必要ですこれを達成する簡単な方法はありますか?

ありがとうございます!

+1

'NSDateIntervalFormatter' – dan

答えて

1

2つのこと:

  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" 
        } 
    } 
    

    注、ここで重要なのは、私が計算されたプロパティではなく、あなたがMKPointAnnotationで取得titleのための保存されたプロパティを使用しているということです。これにより、コールアウトが表示されるたびにプロパティが再度取得され、NSDateComponentsFormatterが経過時間の適切な文字列表現を再計算します。あなたはに初期化子を変更することができます。あなたが合うよう

明らかに、あなたは例えば、あなたが注釈を作成したちょうどその時、本当にstartDateである、またはそれはあなたがあなたのデータソースから設定することができ、いくつかの保存されたプロパティです(これを変更することができます追加プロパティを渡すなど)、これは基本的な考え方を示しています。

enter image description here

+0

は私たちが(http://chat.stackoverflow.com/rooms/117984/discussion-between-rob-and-user154248)[チャットでこの議論を続ける]してみましょう試してみてください。 – Rob

関連する問題