【问题标题】:How can I have tick marks in Core Plot with custom labels?如何使用自定义标签在 Core Plot 中添加刻度线?
【发布时间】:2010-01-07 03:00:05
【问题描述】:

对于我的应用程序的图表(线图),将轴标签格式化为十分之一是没有意义的。在不提供自定义标签的情况下,似乎没有办法改变这一点。

我能够根据this answer 中的示例代码添加自定义轴标签,但标签没有刻度线。

这是一个问题(我没有看到任何东西here)还是我错过了什么?

【问题讨论】:

  • 您好,您是如何通过自定义标签获得一些刻度的?同样的问题,自定义标签可以,但没有刻度。谢谢,卢克

标签: iphone core-plot


【解决方案1】:

如果您想要格式不同于默认格式的数字标签,请创建一个NSNumberFormatter 对象,将其设置为您需要的任何格式,然后将其分配给轴上的labelFormatter 属性。

如果您需要将标签格式化为日期和/或时间,请查看 CPTimeFormatter 类。

【讨论】:

    【解决方案2】:

    NSNumberFormatter 派生一个类(例如MyFormatter)并覆盖stringForObjectValue:

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

    然后将轴的 labelFormatter 属性设置为MyFormatter 的实例,例如:

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

    【讨论】:

      【解决方案3】:

      这对我有用!

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

      【讨论】:

        【解决方案4】:

        您还可以像这样在类别中调配方法:

        #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
        

        【讨论】:

          猜你喜欢
          • 2016-01-07
          • 2014-04-10
          • 2016-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多