Wie kann ich Markierungen in Core-Plot mit benutzerdefinierten Beschriftungen tick?

StackOverflow https://stackoverflow.com/questions/2017939

  •  19-09-2019
  •  | 
  •  

Frage

Für meine App-Grafik (Liniendiagramme) es ist nicht sinnvoll, die Achsenbeschriftungen auf Zehntel zu formatieren. Es sah nicht aus wie es eine Möglichkeit, dies zu ändern, ohne dass benutzerdefinierte Etiketten bereitstellt.

Ich war in der Lage individuelle Achsenbeschriftungen in auf dem Beispielcode basiert hinzufügen diese Antwort , aber die Etiketten haben keine Skalenmarkierungen.

Ist das ein Problem (ich habe nichts gesehen hier ) oder bin ich etwas fehlt?

War es hilfreich?

Lösung

Wenn Sie numerische Etiketten mit einem Format wollen anders als der Standard, erstellen Sie ein NSNumberFormatter Objekt, legen Sie es auf, was auch immer Format, das Sie brauchen, und weisen Sie auf die labelFormatter Eigenschaft auf der Achse.

Überprüfen Sie die CPTimeFormatter Klasse aus, wenn Sie die Etiketten wie Termine und / oder mal formatiert werden müssen.

Andere Tipps

Leiten Sie eine Klasse von NSNumberFormatter (z.B. MyFormatter), und überschreiben stringForObjectValue:

- (NSString *)stringForObjectValue:(NSDecimalNumber *)coordinateValue {
    return @"MyLabel";
}

Dann ist die labelFormatter Eigenschaft Ihrer Achse zu einer Instanz von MyFormatter, z.

MyFormatter *formatter = [[MyFormatter alloc] init];
x.labelFormatter = formatter;
[formatter release];

Das funktioniert für mich!

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0];  
y.labelFormatter = formatter; 

Sie können auch die Methode in der Kategorie wie folgt swizzle:

#import "NSNumberFormatter+BigNumber.h"
#import <objc/runtime.h>

static Method origStringFromNumberMethod = nil;

@implementation NSNumberFormatter (BigNumber)

-(NSString *)stringFromBigNumber:(NSNumber*)number{
    int result = 0;
    int level = 1;
    NSString *format = @"";
    if([number integerValue] >= 1000000000) {
        level = 1000000000;
        format = @"b";
    }
    if([number integerValue] >= 1000000) {
        level = 1000000;
        format = @"m";
    }
    if([number integerValue] >= 1000){
        level = 1000;
        format = @"k";
    }
    result = [number integerValue]/level;

    NSString *kValue = [NSString stringWithFormat:@"%d%@",result,format];

    return kValue;
}

+ (void)initialize {
    origStringFromNumberMethod = class_getClassMethod(self, @selector(stringFromNumber:));
    method_exchangeImplementations(origStringFromNumberMethod,
                                   class_getClassMethod(self, @selector(stringFromBigNumber:)));
}

@end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top