代码之家  ›  专栏  ›  技术社区  ›  gerry3

如何在带有自定义标签的核心绘图中设置刻度线?

  •  11
  • gerry3  · 技术社区  · 14 年前

    对于我的应用程序的图形(线图),将轴标签格式设置为十分之一是没有意义的。看起来没有一种方法可以在不提供自定义标签的情况下更改它。

    我可以根据中的示例代码添加自定义轴标签 this answer 但标签上没有记号。

    这是个问题吗(我什么都没看到) here )还是我错过了什么?

    4 回复  |  直到 10 年前
        1
  •  9
  •   Eric Skroch    14 年前

    如果要使用不同于默认格式的数字标签,请创建 NSNumberFormatter 对象,将其设置为所需的格式,并将其分配给 labelFormatter 轴上的属性。

    退房 CPTimeFormatter 如果需要将标签格式设置为日期和/或时间,则初始化。

        2
  •  4
  •   Imre Kelényi    13 年前

    从派生类 NSNumberFormatter (例如) MyFormatter )和重写 stringForObjectValue:

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

    然后将轴的LabelFormatter属性设置为 格式化程序 ,例如:

    MyFormatter *formatter = [[MyFormatter alloc] init];
    x.labelFormatter = formatter;
    [formatter release];
    
        3
  •  1
  •   Hector Scout    13 年前

    这对我有用!

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setMaximumFractionDigits:0];  
    y.labelFormatter = formatter; 
    
        4
  •  0
  •   yershuachu    10 年前

    您还可以像这样在类别中旋转方法:

    #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