2010-01-07 19 views
11

मेरे ऐप के ग्राफ (लाइन प्लॉट्स) के लिए अक्ष लेबल को दसवीं तक प्रारूपित करने का अर्थ नहीं है। ऐसा लगता है कि कस्टम लेबल प्रदान किए बिना इसे बदलने का कोई तरीका नहीं था।कस्टम प्लॉट के साथ कोर प्लॉट में टिक टिक कैसे हो सकते हैं?

मैं this answer में नमूना कोड के आधार पर कस्टम अक्ष लेबल जोड़ने में सक्षम था, लेकिन लेबल में टिक अंक नहीं हैं।

क्या यह कोई समस्या है (मुझे here कुछ भी नहीं मिला) या क्या मुझे कुछ याद आ रही है?

+0

हैलो, आपने अपने कस्टम लेबल के साथ कुछ टिक प्राप्त करने का प्रबंधन कैसे किया? यहां वही समस्या है, कस्टम लेबल ठीक है लेकिन कोई टिक नहीं है। धन्यवाद, ल्यूक – Luc

उत्तर

9

यदि आप डिफ़ॉल्ट से भिन्न प्रारूप वाले संख्यात्मक लेबल चाहते हैं, तो NSNumberFormatter ऑब्जेक्ट बनाएं, इसे आवश्यक प्रारूप में सेट करें, और अक्ष पर labelFormatter संपत्ति को असाइन करें।

CPTimeFormatter कक्षा देखें यदि आपको लेबल को दिनांक और/या समय के रूप में प्रारूपित करने की आवश्यकता है।

1

यह मेरे लिए काम किया!

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

(जैसे MyFormatter) जैसे NSNumberFormatter से एक वर्ग प्राप्त और ओवरराइड stringForObjectValue:

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

फिर MyFormatter का एक उदाहरण के लिए अपने अक्ष के labelFormatter गुण सेट,:

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

मैंने जो समझाया वह मैंने किया लेकिन stringForObjectValue को नहीं कहा जाता है ... – Luc

0

आप इस तरह की श्रेणी में विधि को भी तेज कर सकते हैं:

#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 
संबंधित मुद्दे