2010-01-07 6 views
11

Für das Diagramm meiner App (Liniendiagramme) ist es nicht sinnvoll, die Achsenbeschriftungen auf Zehntel zu formatieren. Es sah nicht so aus, als ob es eine Möglichkeit gäbe, dies zu ändern, ohne benutzerdefinierte Labels bereitzustellen.Wie kann ich Markierungen in Core Plot mit benutzerdefinierten Beschriftungen verwenden?

Ich konnte benutzerdefinierte Achsenbeschriftungen basierend auf dem Beispielcode in this answer hinzufügen, aber die Beschriftungen haben keine Teilstriche.

Ist das ein Problem (ich habe nichts gesehen here) oder fehle ich etwas?

+0

Hallo, Wie haben Sie es geschafft, einige Ticks mit Ihren benutzerdefinierten Etiketten zu bekommen? Das gleiche Problem hier, benutzerdefinierte Etiketten in Ordnung, aber keine Ticks. Danke, Luc – Luc

Antwort

9

Wenn Sie numerische Beschriftungen mit einem anderen als dem Standardformat erstellen möchten, erstellen Sie ein NSNumberFormatter-Objekt, legen Sie es auf das gewünschte Format fest und weisen Sie es der labelFormatter-Eigenschaft auf der Achse zu.

Überprüfen Sie die CPTimeFormatter Klasse, wenn Sie die Etiketten als Daten und/oder Zeiten formatieren müssen.

1

Das funktionierte für mich!

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

Leiten Sie eine Klasse von NSNumberFormatter (zB MyFormatter) und stringForObjectValue:

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

Dann auf eine Instanz MyFormatter, zum Beispiel überschreiben die labelFormatter Eigenschaft Ihrer Achse festgelegt:

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

Ich habe getan, was Sie erklärt haben, aber stringForObjectValue wird nicht aufgerufen ... – Luc

0

Sie kann 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 
Verwandte Themen