3

iOSチャートを使用して、Swift iOSアプリでいくつかのデータをチャート化しています。時間は秒として Int 変数に保存されますが、明らかに人々は Y 軸の 1 時間 45 分を 6300 として表示したくないので、フォーマットする必要があります。

iOSチャートでは、NSNumberFormatterを使用してこれを行うように設定できます

var formatter: NSNumberFormatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.SpellOutStyle
chartHolder.leftAxis.valueFormatter = formatter

しかし、利用可能なスタイルのどれも、私が必要とするものに適していません. 数秒かけて、たとえば1時間45分に変える必要があります。カスタム NSNumberFormatterStyle を作成したいのですが、どうすればよいですか?

どんな助けでも大歓迎です。

4

3 に答える 3

3

これを行う良い方法は、サブクラスを作成し、その内部をNSNumberFormatter使用して、数値から時間のような文字列出力を生成することです。NSDateFormatter次に例を示します。

class ElapsedTimeFormatter: NSNumberFormatter {

    lazy var dateFormatter: NSDateFormatter = {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        return dateFormatter
    }()

    override func stringFromNumber(number: NSNumber) -> String? {
        let timeInterval = NSTimeInterval(number)
        return dateFormatter.stringFromDate(NSDate(timeIntervalSinceReferenceDate: timeInterval))
    }
}

テスト:

let formatter = ElapsedTimeFormatter()
let s = formatter.stringFromNumber(6300)
// Output: s = "01:45"
于 2015-07-21T19:22:47.460 に答える
2

これは NSNumberFormatterStyle では機能しません - そのオプションはあなたにとってはあまりにも限られています. あなたがすべきことは、サブクラスNSNumberFormatterであり、関数をオーバーライドしstringFromNumber:ます。そこで、必要なすべての文字列操作を行うことができます。

于 2015-07-21T19:02:35.433 に答える