بادئ ذي بدء ، مكتبة IOS هذه رائعة! شكرا.
يجب أن أعرض قيم Y في مخطط شريطي بتنسيق الوقت (mn: ss)
لقد رأيت في وثائق IOS أن فئة تسمى "ChartDefaultXAxisValueFormatter" ، لكن لا يمكنني العثور على طريقة لاستخدامها.
هل حقق أي شخص مثل هذا الشيء؟
الكسيس
هل نظرت إلى مثال وحدة التحكم في عرض المخطط الشريطي المكدس؟ أتخيل أنه مشابه حيث تمرر منسق؟
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 1;
formatter.negativeSuffix = @" $";
formatter.positiveSuffix = @" $";
BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets];
[data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]];
[data setValueFormatter:formatter];
_chartView.data = data;
وأشار @ dxclancy إلى ذلك. كن على علم بأنه منسق أرقام الآن ، لذلك قد تحتاج إلى كتابة بعض التعليمات البرمجية لربط الرقم ومنسق التاريخ.
أهلا،
شكرا جوابك. لسوء الحظ ، لا يقبل leftAxis.valueformatter سوى NSNumberFormatter.
أحاول استخدام ChartDefaultXAxisValueFormatter كما هو الحال في الملفات السريعة ، لكن لا يمكنني إدارة تنفيذه.
ما نحتاجه هو عرض المحور الأيسر (ص) كوقت على سبيل المثال = 1:02:58
الكسيس
مرحبًا ، أفترض أن ما تريده هو تمرير NSDateFormatter؟
أرى هذا في التعريف:
القيمة var العامةالمنسق: ChartXAxisValueFormatter؟
لذلك يجب أن يكون أحد فصولك ينفذ هذا البروتوكول
<strong i="9">@interface</strong> MyChartViewController: < ChartXAxisValueFormatter>
أو
<strong i="13">@interface</strong> MyCustomFormatter: NSObject < ChartXAxisValueFormatter>
أو ما يعادله بسرعة.
ولكن يبدو أنك تريد تنسيق yVals ، مما يعني أنه لا يمكنك الوصول إلا إلى NSNumberFormatter. حق؟
نحن نجري بالفعل مناقشة حول قضية مشابهة لهذا في # 742. ومع ذلك ، يبدو أن موقف danielgindi حاليًا هو أن هذا غير صحيح.
لذلك أعتقد أن لديك 3 خيارات.
لاحظ أنني جديد إلى حد ما في هذه المكتبة الرائعة التي تحتوي على الكثير من الخيارات الرائعة التي لست على دراية بها ، لذلك قد أفتقد شيئًا واضحًا.
نقدر اقتراحاتك. نحتاج إلى التفكير مليًا إذا أردنا نقل منسق المحور إلى المُنسِّقات. بالنظر إلى أن جميع البيانات عبارة عن أرقام بشكل طبيعي ، نعتقد أن منسق الأرقام هو المنسق الذي يجب استخدامه. في حالة رغبتك في عرض سلاسل مختلفة من القيمة ، يمكنك تخصيص السلاسل الخاصة بك. لكن مصدر المنسق هو رقم بالتأكيد.
لقد استخدمت طريقة التجاوز. هذا يعمل كالسحر!
شكرا يا رفاق ، أنتم الأفضل :)
NSNumberFormatter
أصح من NSFormatter
ببساطة لأن القيمة التي يتم تمريرها هي _ دائمًا_ رقم. لا تكسب أي شيء باستخدام NSFormatter
وجه التحديد. حقيقة أنك تريد ناتجًا ليس رقمًا ، لا يغير حقيقة أن الإدخال عبارة عن رقم ، وتريد تنسيق هذا الرقم بطريقة خاصة جدًا.
ومع ذلك ، سنمضي قدمًا في وجود واجهتنا الخاصة التي تمرر مزيدًا من المعلومات جنبًا إلى جنب مع القيمة (نهج ChartYAxisValueFormatter
).
بعد قولي هذا - يجب أن تظل هذه المشكلة مفتوحة حتى ننفذ البروتوكول لمنسق قيمة المحور Y.
تم التنفيذ في الرسوم البيانية 3.0 (فرع الإصدار 3)
لقد حققت ذلك من خلال وراثة IAxisValueFormatter
.
import Foundation
import Charts
class YAxisValueFormatter: NSObject, IAxisValueFormatter {
let numFormatter: NumberFormatter
override init() {
numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1
numFormatter.maximumFractionDigits = 1
// if number is less than 1 add 0 before decimal
numFormatter.minimumIntegerDigits = 1 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"
}
/// Called when a value from an axis is formatted before being drawn.
///
/// For performance reasons, avoid excessive calculations and memory allocations inside this method.
///
/// - returns: The customized label that is drawn on the axis.
/// - parameter value: the value that is currently being drawn
/// - parameter axis: the axis that the value belongs to
///
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return numFormatter.string(from: NSNumber(floatLiteral: value))!
}
}
قم بإنشاء YAxisValueFormatterclass ، وقم بتعيين كائن للرسم البياني leftAxis
// Number formatting of YAxis
chartView.leftAxis.valueFormatter = YAxisValueFormatter()
عندما أرث IAxisValueFormatter كما هو مذكور أعلاه ، أحصل على خطأ: "لا يوجد نوع أو بروتوكول يسمى 'IChartAxisValueFormatter'" في ملف ProjectName-Swift.h الخاص بي.
التعليق الأكثر فائدة
لقد حققت ذلك من خلال وراثة
IAxisValueFormatter
.قم بإنشاء YAxisValueFormatterclass ، وقم بتعيين كائن للرسم البياني leftAxis