[
  {
    "path": ".gitignore",
    "content": "project.xcworkspace\nxcuserdata\n*.xccheckout\nconfig.plist\n*.swp\n.DS_Store\nBuild"
  },
  {
    "path": "README.md",
    "content": "### 如何使用-SCChart\n\n![icon](https://img.alicdn.com/imgextra/i2/135480037/TB2E0ubkpXXXXaCXXXXXXXXXXXX_!!135480037.gif)\n\n####导入主头文件\n    #import \"SCChart.h\"\n    \n##### 一.折线图和柱状图\n1.实例化 ( SCChartLineStyle | SCChartBarStyle ) \n\n    SCChart *chartView = [[SCChart alloc] initwithSCChartDataFrame:CGRectMake(10, 10, [UIScreen mainScreen].bounds.size.width - 20, 150) withSource:self withStyle:SCChartLineStyle];\n\n2.设置横坐标标题\n\n    - (NSArray *)SCChart_xLableArray:(SCChart *)chart {\n\t    return 横坐标数组;\n    }\n    \n3.设置数值(多重数组, 纵坐标标题动态计算)\n\n    - (NSArray *)SCChart_yValueArray:(SCChart *)chart {\n\t    return @[数组1,数组2];\n    }\n    \n4.设置折现颜色\n\n    - (NSArray *)SCChart_ColorArray:(SCChart *)chart {\n\t    return @[SCBlue,SCRed,SCGreen];\n    }\n\n5.是否显示间隔线条(折线图专用)\n\n    - (BOOL)SCChart:(SCChart *)chart ShowHorizonLineAtIndex:(NSInteger)index {\n\t    return YES;\n    }\n##### 二.圆环图\n1.实例化\n\n    SCCircleChart *chartView = [[SCCircleChart alloc] initWithFrame:CGRectMake(0, (self.frame.size.height-100)/2, SCREEN_WIDTH, 100.0) total:@100 current:@60 clockwise:YES];\n\n2.设置圆环颜色\n\n    [chartView setStrokeColor:SCBlue];\n    \n3.画线\n\n    [chartView strokeChart];\n    \n##### 三.圆饼图\n1.设置数值并实例化\n    \n    NSArray *items = @[[SCPieChartDataItem dataItemWithValue:10 color:SCRed description:@\"A\"],\n                       [SCPieChartDataItem dataItemWithValue:20 color:SCBlue description:@\"B\"],\n                       [SCPieChartDataItem dataItemWithValue:40 color:SCGreen description:@\"C\"],\n                       ];\n\n    SCPieChart *chartView = [[SCPieChart alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-150)/2, (self.frame.size.height-150)/2, 150.0, 150.0) items:items];\n\n2.设置描述文字\n\n    chartView.descriptionTextColor = [UIColor whiteColor];\n    chartView.descriptionTextFont  = [UIFont fontWithName:@\"Avenir-Medium\" size:12.0];\n    \n3.画线\n\n    [chartView strokeChart];\n"
  },
  {
    "path": "SCChart/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "SCChart/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import \"SCViewController.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    self.window.rootViewController = [[SCViewController alloc] init];\n    [self.window makeKeyAndVisible];\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "SCChart/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2015年 meilishuo. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"SCChart\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "SCChart/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "SCChart/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.meilishuo.bizfe.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "SCChart/SCBarCell.h",
    "content": "//\n//  DCBarCell.h\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCBarCell : UITableViewCell\n\n- (void)configUI:(NSIndexPath *)indexPath;\n\n@end\n"
  },
  {
    "path": "SCChart/SCBarCell.m",
    "content": "//\n//  DCBarCell.m\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCBarCell.h\"\n#import \"SCChart.h\"\n\n@interface SCBarCell ()<SCChartDataSource>\n{\n    NSIndexPath *path;\n    SCChart *chartView;\n}\n@end\n\n@implementation SCBarCell\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {\n    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {\n        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];\n        [btn setTitle:@\"点击刷新数据\" forState:UIControlStateNormal];\n        btn.titleLabel.font = [UIFont systemFontOfSize:12.0];;\n        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];\n        btn.frame = CGRectMake(0, 0, SCREEN_WIDTH, 27);\n        [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:btn];\n    }\n    return self;\n}\n\n- (void)btnPressed:(id)sender {\n    [chartView strokeChart];\n}\n\n- (void)configUI:(NSIndexPath *)indexPath {\n    if (chartView) {\n        [chartView removeFromSuperview];\n        chartView = nil;\n    }\n    path = indexPath;\n    chartView = [[SCChart alloc] initwithSCChartDataFrame:CGRectMake(10, (self.frame.size.height-150)/2, [UIScreen mainScreen].bounds.size.width - 20, 150)\n                                               withSource:self\n                                                withStyle:SCChartBarStyle];\n    [chartView showInView:self.contentView];\n}\n\n- (NSArray *)getXTitles:(int)num {\n    NSMutableArray *xTitles = [NSMutableArray array];\n    for (int i=0; i<num; i++) {\n        NSString * str = [NSString stringWithFormat:@\"03-0%d\",i+1];\n        [xTitles addObject:str];\n    }\n    return xTitles;\n}\n\n#pragma mark - @required\n//横坐标标题数组\n- (NSArray *)SCChart_xLableArray:(SCChart *)chart {\n    return [self getXTitles:7];\n}\n\n//数值多重数组\n- (NSArray *)SCChart_yValueArray:(SCChart *)chart {\n    switch (path.row) {\n        case 0:\n        {\n            NSMutableArray *ary = [NSMutableArray array];\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(100);\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary addObject:str];\n            }\n            return @[ary];\n            break;\n        }\n        case 1:\n        {\n            NSMutableArray *ary = [NSMutableArray array];\n            NSMutableArray *ary2 = [NSMutableArray array];\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(1000) / 100;\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary addObject:str];\n            }\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(1000) / 100;\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary2 addObject:str];\n            }\n            return @[ary,ary2];\n            break;\n        }\n        default:\n            break;\n    }\n    return nil;\n}\n\n#pragma mark - @optional\n//颜色数组\n- (NSArray *)SCChart_ColorArray:(SCChart *)chart {\n    return @[SCGreen,SCRed,SCBrown];\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCBar.h",
    "content": "//\n//  PNBar.h\n//  PNChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCBar : UIView\n\n@property (nonatomic) float grade;\n\n@property (nonatomic,strong) CAShapeLayer * chartLine;\n\n@property (nonatomic, strong) UIColor * barColor;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCBar.m",
    "content": "//\n//  UUBar.m\n//  UUChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCBar.h\"\n#import \"SCColor.h\"\n\n@implementation SCBar\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        // Initialization code\n\t\t_chartLine = [CAShapeLayer layer];\n\t\t_chartLine.lineCap = kCALineCapSquare;\n\t\t_chartLine.fillColor   = [[UIColor whiteColor] CGColor];\n\t\t_chartLine.lineWidth   = self.frame.size.width;\n\t\t_chartLine.strokeEnd   = 0.0;\n\t\tself.clipsToBounds = YES;\n\t\t[self.layer addSublayer:_chartLine];\n        \n//\t\tself.layer.cornerRadius = 2.0; // 直接设置layer会造成卡顿\n    }\n    return self;\n}\n\n-(void)setGrade:(float)grade\n{\n    if (grade==0)\n    return;\n    \n\t_grade = grade;\n\tUIBezierPath *progressline = [UIBezierPath bezierPath];\n    \n    [progressline moveToPoint:CGPointMake(self.frame.size.width/2.0, self.frame.size.height+30)];\n\t[progressline addLineToPoint:CGPointMake(self.frame.size.width/2.0, (1 - grade) * self.frame.size.height+15)];\n\t\n    [progressline setLineWidth:1.0];\n    [progressline setLineCapStyle:kCGLineCapSquare];\n\t_chartLine.path = progressline.CGPath;\n\n\tif (_barColor) {\n\t\t_chartLine.strokeColor = [_barColor CGColor];\n\t}else{\n\t\t_chartLine.strokeColor = [SCGreen CGColor];\n\t}\n    \n    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@\"strokeEnd\"];\n    pathAnimation.duration = 1.5;\n    pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n    pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];\n    pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];\n    pathAnimation.autoreverses = NO;\n    [_chartLine addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n    \n    _chartLine.strokeEnd = 2.0;\n}\n\n- (void)drawRect:(CGRect)rect\n{\n\t//Draw BG\n    CGContextRef context = UIGraphicsGetCurrentContext();\n    \n    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);\n\tCGContextFillRect(context, rect);\n    \n}\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCBarChart.h",
    "content": "//\n//  UUBarChart.h\n//  UUChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"SCColor.h\"\n#define chartMargin     10\n#define xLabelMargin    15\n#define yLabelMargin    15\n#define UULabelHeight   10\n#define UUYLabelwidth   30\n\n@interface SCBarChart : UIView\n\n/**\n * This method will call and troke the line in animation\n */\n\n-(void)strokeChart;\n\n@property (strong, nonatomic) NSArray * xLabels;\n\n@property (strong, nonatomic) NSArray * yLabels;\n\n@property (strong, nonatomic) NSArray * yValues;\n\n@property (nonatomic) CGFloat xLabelWidth;\n\n@property (nonatomic) float yValueMax;\n@property (nonatomic) float yValueMin;\n\n@property (nonatomic, assign) BOOL showRange;\n\n@property (nonatomic, assign) CGRange chooseRange;\n\n@property (nonatomic, strong) NSArray * colors;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCBarChart.m",
    "content": "//\n//  UUBarChart.m\n//  UUChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCBarChart.h\"\n#import \"SCChartLabel.h\"\n#import \"SCBar.h\"\n#import \"SCTool.h\"\n\n@interface SCBarChart ()\n{\n    UIScrollView *myScrollView;\n}\n@end\n\n@implementation SCBarChart\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        // Initialization code\n        self.clipsToBounds = YES;\n        myScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(UUYLabelwidth, 0, frame.size.width-UUYLabelwidth, frame.size.height)];\n        [self addSubview:myScrollView];\n    }\n    return self;\n}\n\n-(void)setYValues:(NSArray *)yValues\n{\n    _yValues = yValues;\n    [self setYLabels:yValues];\n}\n\n-(void)setYLabels:(NSArray *)yLabels\n{\n    CGFloat max = 0;\n    CGFloat min = 1000000000;\n    NSInteger rowCount = 0; // 自动计算每个图表适合的行数\n    for (NSArray * ary in yLabels) {\n        for (NSString *valueString in ary) {\n            CGFloat value = [valueString floatValue];\n            if (value > max) {\n                max = value;\n            }\n            if (value < min) {\n                min = value;\n            }\n        }\n    }\n    if (self.showRange) {\n        _yValueMin = min;\n    }else{\n        _yValueMin = 0;\n    }\n    _yValueMax = max;\n    \n    if (_chooseRange.max!=_chooseRange.min) { // 自定义数值范围\n        _yValueMax = _chooseRange.max;\n        _yValueMin = _chooseRange.min;\n    } else { // 自动计算数值范围和合适的行数\n        rowCount = [SCTool rowCountWithValueMax:_yValueMax] == 0 ? 5 : [SCTool rowCountWithValueMax:_yValueMax];\n        _yValueMax = [SCTool rangeMaxWithValueMax:_yValueMax] == 0 ? 100 : [SCTool rangeMaxWithValueMax:_yValueMax];\n        _yValueMin = 0;\n    }\n\n    float level = (_yValueMax-_yValueMin) /rowCount; // 每个区间的差值\n    CGFloat chartCavanHeight = self.frame.size.height - UULabelHeight*3;\n    CGFloat levelHeight = chartCavanHeight /rowCount; // 每个区间的高度\n    \n    for (int i=0; i<rowCount+1; i++) {\n        SCChartLabel * label = [[SCChartLabel alloc] initWithFrame:CGRectMake(0.0,chartCavanHeight-i*levelHeight+5, UUYLabelwidth, UULabelHeight)];\n\t\tlabel.text = [NSString stringWithFormat:@\"%g\",level * i+_yValueMin];\n\t\t[self addSubview:label];\n    }\n\t\n}\n\n-(void)setXLabels:(NSArray *)xLabels\n{\n    _xLabels = xLabels;\n    NSInteger num;\n    if (xLabels.count>=8) {\n        num = 8;\n    }else if (xLabels.count<=4){\n        num = 4;\n    }else{\n        num = xLabels.count;\n    }\n    _xLabelWidth = myScrollView.frame.size.width/num;\n    \n    for (int i=0; i<xLabels.count; i++) {\n        SCChartLabel * label = [[SCChartLabel alloc] initWithFrame:CGRectMake((i *  _xLabelWidth ), self.frame.size.height - UULabelHeight, _xLabelWidth, UULabelHeight)];\n        label.text = xLabels[i];\n        [myScrollView addSubview:label];\n    }\n    \n    float max = (([xLabels count]-1)*_xLabelWidth + chartMargin)+_xLabelWidth;\n    if (myScrollView.frame.size.width < max-10) {\n        myScrollView.contentSize = CGSizeMake(max, self.frame.size.height);\n    }\n}\n-(void)setColors:(NSArray *)colors\n{\n\t_colors = colors;\n}\n- (void)setChooseRange:(CGRange)chooseRange\n{\n    _chooseRange = chooseRange;\n}\n-(void)strokeChart\n{\n    \n    CGFloat chartCavanHeight = self.frame.size.height - UULabelHeight*3;\n\t\n    for (int i=0; i<_yValues.count; i++) {\n        if (i==2)\n            return;\n        NSArray *childAry = _yValues[i];\n        for (int j=0; j<childAry.count; j++) {\n            NSString *valueString = childAry[j];\n            float value = [valueString floatValue];\n            float grade = ((float)value-_yValueMin) / ((float)_yValueMax-_yValueMin);\n            \n            SCBar * bar = [[SCBar alloc] initWithFrame:CGRectMake((j+(_yValues.count==1?0.1:0.05))*_xLabelWidth +i*_xLabelWidth * 0.47, UULabelHeight, _xLabelWidth * (_yValues.count==1?0.8:0.45), chartCavanHeight)];\n            bar.barColor = [_colors objectAtIndex:i];\n            bar.grade = grade;\n            [myScrollView addSubview:bar];\n            \n        }\n    }\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCChart.h",
    "content": "//\n//  UUChart.h\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"SCChart.h\"\n#import \"SCColor.h\"\n#import \"SCLineChart.h\"\n#import \"SCBarChart.h\"\n#import \"SCCircleChart.h\"\n#import \"SCPieChart.h\"\n//类型\ntypedef enum {\n\tSCChartLineStyle,\n\tSCChartBarStyle\n} SCChartStyle;\n\n\n@class SCChart;\n@protocol SCChartDataSource <NSObject>\n\n@required\n//横坐标标题数组\n- (NSArray *)SCChart_xLableArray:(SCChart *)chart;\n\n//数值多重数组\n- (NSArray *)SCChart_yValueArray:(SCChart *)chart;\n\n@optional\n//颜色数组\n- (NSArray *)SCChart_ColorArray:(SCChart *)chart;\n\n//显示数值范围\n- (CGRange)SCChartChooseRangeInLineChart:(SCChart *)chart;\n\n#pragma mark 折线图专享功能\n//标记数值区域\n- (CGRange)SCChartMarkRangeInLineChart:(SCChart *)chart;\n\n//判断显示横线条\n- (BOOL)SCChart:(SCChart *)chart ShowHorizonLineAtIndex:(NSInteger)index;\n\n//判断显示最大最小值\n- (BOOL)SCChart:(SCChart *)chart ShowMaxMinAtIndex:(NSInteger)index;\n@end\n\n\n@interface SCChart : UIView\n\n//是否自动显示范围\n@property (nonatomic, assign) BOOL showRange;\n\n@property (assign) SCChartStyle chartStyle;\n\n-(id)initwithSCChartDataFrame:(CGRect)rect withSource:(id<SCChartDataSource>)dataSource withStyle:(SCChartStyle)style;\n\n- (void)showInView:(UIView *)view;\n\n-(void)strokeChart;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCChart.m",
    "content": "//\n//  UUChart.m\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCChart.h\"\n#define kRowMax 6 // 可支持最大行数\n\n@interface SCChart ()\n\n@property (strong, nonatomic) SCLineChart * lineChart;\n\n@property (strong, nonatomic) SCBarChart * barChart;\n\n@property (assign, nonatomic) id<SCChartDataSource> dataSource;\n\n@end\n\n@implementation SCChart\n\n-(id)initwithSCChartDataFrame:(CGRect)rect withSource:(id<SCChartDataSource>)dataSource withStyle:(SCChartStyle)style{\n    self.dataSource = dataSource;\n    self.chartStyle = style;\n    return [self initWithFrame:rect];\n}\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        // Initialization code\n        self.backgroundColor = [UIColor whiteColor];\n        self.clipsToBounds = NO;\n    }\n    return self;\n}\n\n-(void)setUpChart{\n\tif (self.chartStyle == SCChartLineStyle) {\n        \n        [self.lineChart removeFromSuperview];\n        self.lineChart = nil;\n\n        if(!_lineChart){\n            _lineChart = [[SCLineChart alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];\n            [self addSubview:_lineChart];\n        }\n        //选择标记范围\n        if ([self.dataSource respondsToSelector:@selector(SCChartMarkRangeInLineChart:)]) {\n            [_lineChart setMarkRange:[self.dataSource SCChartMarkRangeInLineChart:self]];\n        }\n        //选择显示范围\n        if ([self.dataSource respondsToSelector:@selector(SCChartChooseRangeInLineChart:)]) {\n            [_lineChart setChooseRange:[self.dataSource SCChartChooseRangeInLineChart:self]];\n        }\n        //显示颜色\n        if ([self.dataSource respondsToSelector:@selector(SCChart_ColorArray:)]) {\n            [_lineChart setColors:[self.dataSource SCChart_ColorArray:self]];\n        }\n        //显示横线\n        if ([self.dataSource respondsToSelector:@selector(SCChart:ShowHorizonLineAtIndex:)]) {\n            NSMutableArray *showHorizonArray = [[NSMutableArray alloc]init];\n            for (int i=0; i<kRowMax+1; i++) {\n                if ([self.dataSource SCChart:self ShowHorizonLineAtIndex:i]) {\n                    [showHorizonArray addObject:@\"1\"];\n                }else{\n                    [showHorizonArray addObject:@\"0\"];\n                }\n            }\n            [_lineChart setShowHorizonLine:showHorizonArray];\n\n        }\n        //判断显示最大最小值\n        if ([self.dataSource respondsToSelector:@selector(SCChart:ShowMaxMinAtIndex:)]) {\n            NSMutableArray *showMaxMinArray = [[NSMutableArray alloc]init];\n            NSArray *y_values = [self.dataSource SCChart_yValueArray:self];\n            if (y_values.count>0){\n                for (int i=0; i<y_values.count; i++) {\n                    if ([self.dataSource SCChart:self ShowMaxMinAtIndex:i]) {\n                        [showMaxMinArray addObject:@\"1\"];\n                    }else{\n                        [showMaxMinArray addObject:@\"0\"];\n                    }\n                }\n                _lineChart.ShowMaxMinArray = showMaxMinArray;\n            }\n        }\n        \n\t\t[_lineChart setYValues:[self.dataSource SCChart_yValueArray:self]];\n\t\t[_lineChart setXLabels:[self.dataSource SCChart_xLableArray:self]];\n        \n\t\t[_lineChart strokeChart];\n\n\t}else if (self.chartStyle == SCChartBarStyle)\n\t{\n        \n        [self.barChart removeFromSuperview];\n        self.barChart = nil;\n\n        if (!_barChart) {\n            _barChart = [[SCBarChart alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];\n            [self addSubview:_barChart];\n        }\n        if ([self.dataSource respondsToSelector:@selector(SCChartChooseRangeInLineChart:)]) {\n            [_barChart setChooseRange:[self.dataSource SCChartChooseRangeInLineChart:self]];\n        }\n        if ([self.dataSource respondsToSelector:@selector(SCChart_ColorArray:)]) {\n            [_barChart setColors:[self.dataSource SCChart_ColorArray:self]];\n        }\n\t\t[_barChart setYValues:[self.dataSource SCChart_yValueArray:self]];\n\t\t[_barChart setXLabels:[self.dataSource SCChart_xLableArray:self]];\n        \n        [_barChart strokeChart];\n\t}\n}\n\n- (void)showInView:(UIView *)view\n{\n    [self setUpChart];\n    [view addSubview:self];\n}\n\n-(void)strokeChart\n{\n\t[self setUpChart];\n\t\n}\n\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCChartDelegate.h",
    "content": "//\n//  PNChartDelegate.h\n//  PNChartDemo\n//\n//  Created by kevinzhow on 13-12-11.\n//  Copyright (c) 2013年 kevinzhow. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@protocol SCChartDelegate <NSObject>\n@optional\n/**\n * Callback method that gets invoked when the user taps on the chart line.\n */\n- (void)userClickedOnLinePoint:(CGPoint)point lineIndex:(NSInteger)lineIndex;\n\n/**\n * Callback method that gets invoked when the user taps on a chart line key point.\n */\n- (void)userClickedOnLineKeyPoint:(CGPoint)point\n                        lineIndex:(NSInteger)lineIndex\n                       pointIndex:(NSInteger)pointIndex;\n\n/**\n * Callback method that gets invoked when the user taps on a chart bar.\n */\n- (void)userClickedOnBarAtIndex:(NSInteger)barIndex;\n\n\n- (void)userClickedOnPieIndexItem:(NSInteger)pieIndex;\n- (void)didUnselectPieItem;\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCChartLabel.h",
    "content": "//\n//  PNChartLabel.h\n//  PNChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCChartLabel : UILabel\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCChartLabel.m",
    "content": "//\n//  PNChartLabel.m\n//  PNChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCChartLabel.h\"\n#import \"SCColor.h\"\n\n@implementation SCChartLabel\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        // Initialization code\n        [self setLineBreakMode:NSLineBreakByWordWrapping];\n        [self setMinimumScaleFactor:5.0f];\n        [self setNumberOfLines:1];\n        [self setFont:[UIFont boldSystemFontOfSize:9.0f]];\n        [self setTextColor: SCDeepGrey];\n        self.backgroundColor = [UIColor clearColor];\n        [self setTextAlignment:NSTextAlignmentCenter];\n        self.userInteractionEnabled = YES;\n    }\n    return self;\n}\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCCircleChart.h",
    "content": "//\n//  PNCircleChart.h\n//  PNChartDemo\n//\n//  Created by kevinzhow on 13-11-30.\n//  Copyright (c) 2013年 kevinzhow. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"SCColor.h\"\n#import \"UICountingLabel.h\"\n\ntypedef NS_ENUM (NSUInteger, SCChartFormatType) {\n    SCChartFormatTypePercent,\n    SCChartFormatTypeDollar,\n    SCChartFormatTypeNone\n};\n\n#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)\n\n@interface SCCircleChart : UIView\n\n- (void)strokeChart;\n- (void)growChartByAmount:(NSNumber *)growAmount;\n- (void)updateChartByCurrent:(NSNumber *)current;\n- (void)updateChartByCurrent:(NSNumber *)current byTotal:(NSNumber *)total;\n- (id)initWithFrame:(CGRect)frame\n              total:(NSNumber *)total\n            current:(NSNumber *)current\n          clockwise:(BOOL)clockwise;\n\n- (id)initWithFrame:(CGRect)frame\n              total:(NSNumber *)total\n            current:(NSNumber *)current\n          clockwise:(BOOL)clockwise\n             shadow:(BOOL)hasBackgroundShadow\n        shadowColor:(UIColor *)backgroundShadowColor;\n\n- (id)initWithFrame:(CGRect)frame\n              total:(NSNumber *)total\n            current:(NSNumber *)current\n          clockwise:(BOOL)clockwise\n             shadow:(BOOL)hasBackgroundShadow\n        shadowColor:(UIColor *)backgroundShadowColor\ndisplayCountingLabel:(BOOL)displayCountingLabel;\n\n- (id)initWithFrame:(CGRect)frame\n              total:(NSNumber *)total\n            current:(NSNumber *)current\n          clockwise:(BOOL)clockwise\n             shadow:(BOOL)hasBackgroundShadow\n        shadowColor:(UIColor *)backgroundShadowColor\ndisplayCountingLabel:(BOOL)displayCountingLabel\n  overrideLineWidth:(NSNumber *)overrideLineWidth;\n\n@property (strong, nonatomic) UICountingLabel *countingLabel;\n@property (nonatomic) UIColor *strokeColor;\n@property (nonatomic) UIColor *strokeColorGradientStart;\n@property (nonatomic) NSNumber *total;\n@property (nonatomic) NSNumber *current;\n@property (nonatomic) NSNumber *lineWidth;\n@property (nonatomic) NSTimeInterval duration;\n@property (nonatomic) SCChartFormatType chartType;\n@property (nonatomic, copy) NSString *format;\n\n\n@property (nonatomic) CAShapeLayer *circle;\n@property (nonatomic) CAShapeLayer *gradientMask;\n@property (nonatomic) CAShapeLayer *circleBackground;\n\n@property (nonatomic) BOOL displayCountingLabel;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCCircleChart.m",
    "content": "//\n//  PNCircleChart.m\n//  PNChartDemo\n//\n//  Created by kevinzhow on 13-11-30.\n//  Copyright (c) 2013年 kevinzhow. All rights reserved.\n//\n\n#import \"SCCircleChart.h\"\n\n@interface SCCircleChart ()\n@end\n\n@implementation SCCircleChart\n\n- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise {\n    \n    return [self initWithFrame:frame\n                         total:total\n                       current:current\n                     clockwise:clockwise\n                        shadow:NO\n                   shadowColor:[UIColor clearColor]\n          displayCountingLabel:YES\n             overrideLineWidth:@3.0f];\n    \n}\n\n- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor {\n    \n    return [self initWithFrame:frame\n                         total:total\n                       current:current\n                     clockwise:clockwise\n                        shadow:shadow\n                   shadowColor:backgroundShadowColor\n          displayCountingLabel:YES\n             overrideLineWidth:@3.0f];\n    \n}\n\n- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor displayCountingLabel:(BOOL)displayCountingLabel {\n    \n    return [self initWithFrame:frame\n                         total:total\n                       current:current\n                     clockwise:clockwise\n                        shadow:shadow\n                   shadowColor:SCGreen\n          displayCountingLabel:displayCountingLabel\n             overrideLineWidth:@3.0f];\n    \n}\n\n- (id)initWithFrame:(CGRect)frame\n              total:(NSNumber *)total\n            current:(NSNumber *)current\n          clockwise:(BOOL)clockwise\n             shadow:(BOOL)hasBackgroundShadow\n        shadowColor:(UIColor *)backgroundShadowColor\ndisplayCountingLabel:(BOOL)displayCountingLabel\n  overrideLineWidth:(NSNumber *)overrideLineWidth\n{\n    self = [super initWithFrame:frame];\n\n    if (self) {\n        _total = total;\n        _current = current;\n        _strokeColor = SCFreshGreen;\n        _duration = 1.0;\n        _chartType = SCChartFormatTypePercent;\n        \n        _displayCountingLabel = displayCountingLabel;\n\n        CGFloat startAngle = clockwise ? -90.0f : 270.0f;\n        CGFloat endAngle = clockwise ? -90.01f : 270.01f;\n\n        _lineWidth = overrideLineWidth;\n        \n        UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2.0f, self.frame.size.height/2.0f)\n                                                                  radius:(self.frame.size.height * 0.5) - ([_lineWidth floatValue]/2.0f)\n                                                              startAngle:DEGREES_TO_RADIANS(startAngle)\n                                                                endAngle:DEGREES_TO_RADIANS(endAngle)\n                                                               clockwise:clockwise];\n\n        _circle               = [CAShapeLayer layer];\n        _circle.path          = circlePath.CGPath;\n        _circle.lineCap       = kCALineCapRound;\n        _circle.fillColor     = [UIColor clearColor].CGColor;\n        _circle.lineWidth     = [_lineWidth floatValue];\n        _circle.zPosition     = 1;\n\n        _circleBackground             = [CAShapeLayer layer];\n        _circleBackground.path        = circlePath.CGPath;\n        _circleBackground.lineCap     = kCALineCapRound;\n        _circleBackground.fillColor   = [UIColor clearColor].CGColor;\n        _circleBackground.lineWidth   = [_lineWidth floatValue];\n        _circleBackground.strokeColor = (hasBackgroundShadow ? backgroundShadowColor.CGColor : [UIColor clearColor].CGColor);\n        _circleBackground.strokeEnd   = 1.0;\n        _circleBackground.zPosition   = -1;\n\n        [self.layer addSublayer:_circle];\n        [self.layer addSublayer:_circleBackground];\n\n        _countingLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(0, 0, 100.0, 50.0)];\n        [_countingLabel setTextAlignment:NSTextAlignmentCenter];\n        [_countingLabel setFont:[UIFont boldSystemFontOfSize:12.0f]];\n        [_countingLabel setTextColor:[UIColor grayColor]];\n        [_countingLabel setBackgroundColor:[UIColor clearColor]];\n        [_countingLabel setCenter:CGPointMake(self.frame.size.width/2.0f, self.frame.size.height/2.0f)];\n        _countingLabel.numberOfLines = 0;\n        _countingLabel.method = UILabelCountingMethodEaseInOut;\n        if (_displayCountingLabel) {\n            [self addSubview:_countingLabel];\n        }\n    }\n\n    return self;\n}\n\n\n- (void)strokeChart\n{\n    // Add counting label\n\n    if (_displayCountingLabel) {\n        switch (self.chartType) {\n            case SCChartFormatTypePercent:\n                self.format = @\"%d%%\";\n                break;\n            case SCChartFormatTypeDollar:\n                self.format = @\"$%d\";\n                break;\n            case SCChartFormatTypeNone:\n            default:\n                self.format = self.format ? self.format : @\"%d\";\n                break;\n        }\n        self.countingLabel.format = self.format;\n        [self addSubview:self.countingLabel];\n    }\n\n\n    // Add circle params\n\n    _circle.lineWidth   = [_lineWidth floatValue];\n    _circleBackground.lineWidth = [_lineWidth floatValue];\n    _circleBackground.strokeEnd = 1.0;\n    _circle.strokeColor = _strokeColor.CGColor;\n\n    // Add Animation\n    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@\"strokeEnd\"];\n    pathAnimation.duration = self.duration;\n    pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n    pathAnimation.fromValue = @0.0f;\n    pathAnimation.toValue = @([_current floatValue] / [_total floatValue]);\n    [_circle addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n    _circle.strokeEnd   = [_current floatValue] / [_total floatValue];\n\n    [_countingLabel countFrom:0 to:[_current floatValue]/([_total floatValue]/100.0) withDuration:self.duration];\n\n\n    // Check if user wants to add a gradient from the start color to the bar color\n    if (_strokeColorGradientStart) {\n\n        // Add gradient\n        self.gradientMask = [CAShapeLayer layer];\n        self.gradientMask.fillColor = [[UIColor clearColor] CGColor];\n        self.gradientMask.strokeColor = [[UIColor blackColor] CGColor];\n        self.gradientMask.lineWidth = _circle.lineWidth;\n        self.gradientMask.lineCap = kCALineCapRound;\n        CGRect gradientFrame = CGRectMake(0, 0, 2*self.bounds.size.width, 2*self.bounds.size.height);\n        self.gradientMask.frame = gradientFrame;\n        self.gradientMask.path = _circle.path;\n\n        CAGradientLayer *gradientLayer = [CAGradientLayer layer];\n        gradientLayer.startPoint = CGPointMake(0.5,1.0);\n        gradientLayer.endPoint = CGPointMake(0.5,0.0);\n        gradientLayer.frame = gradientFrame;\n        UIColor *endColor = (_strokeColor ? _strokeColor : [UIColor greenColor]);\n        NSArray *colors = @[\n                            (id)endColor.CGColor,\n                            (id)_strokeColorGradientStart.CGColor\n                            ];\n        gradientLayer.colors = colors;\n\n        [gradientLayer setMask:self.gradientMask];\n\n        [_circle addSublayer:gradientLayer];\n\n        self.gradientMask.strokeEnd = [_current floatValue] / [_total floatValue];\n\n        [self.gradientMask addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n    }\n}\n\n\n\n- (void)growChartByAmount:(NSNumber *)growAmount\n{\n    NSNumber *updatedValue = [NSNumber numberWithFloat:[_current floatValue] + [growAmount floatValue]];\n\n    // Add animation\n    [self updateChartByCurrent:updatedValue];\n}\n\n\n-(void)updateChartByCurrent:(NSNumber *)current{\n    \n    [self updateChartByCurrent:current\n                       byTotal:_total];\n    \n}\n\n-(void)updateChartByCurrent:(NSNumber *)current byTotal:(NSNumber *)total {\n    // Add animation\n    CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@\"strokeEnd\"];\n    pathAnimation.duration = self.duration;\n    pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n    pathAnimation.fromValue = @([_current floatValue] / [_total floatValue]);\n    pathAnimation.toValue = @([current floatValue] / [total floatValue]);\n    _circle.strokeEnd   = [current floatValue] / [total floatValue];\n    \n    if (_strokeColorGradientStart) {\n        self.gradientMask.strokeEnd = _circle.strokeEnd;\n        [self.gradientMask addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n    }\n    [_circle addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n    \n    if (_displayCountingLabel) {\n        [self.countingLabel countFrom:fmin([_current floatValue], [_total floatValue]) to:fmin([current floatValue], [total floatValue]) withDuration:self.duration];\n    }\n    \n    _current = current;\n    _total = total;\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCColor.h",
    "content": "//\n//  UUColor.h\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n/*\n *  System Versioning Preprocessor Macros\n */\n\n#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)\n\n#define SCGrey         [UIColor colorWithRed:246.0/255.0 green:246.0/255.0 blue:246.0/255.0 alpha:1.0f]\n#define SCLightBlue    [UIColor colorWithRed:94.0/255.0 green:147.0/255.0 blue:196.0/255.0 alpha:1.0f]\n#define SCGreen        [UIColor colorWithRed:77.0/255.0 green:186.0/255.0 blue:122.0/255.0 alpha:1.0f]\n#define SCTitleColor   [UIColor colorWithRed:0.0/255.0 green:189.0/255.0 blue:113.0/255.0 alpha:1.0f]\n#define SCButtonGrey   [UIColor colorWithRed:141.0/255.0 green:141.0/255.0 blue:141.0/255.0 alpha:1.0f]\n#define SCFreshGreen   [UIColor colorWithRed:77.0/255.0 green:196.0/255.0 blue:122.0/255.0 alpha:1.0f]\n#define SCRed          [UIColor colorWithRed:245.0/255.0 green:94.0/255.0 blue:78.0/255.0 alpha:1.0f]\n#define SCMauve        [UIColor colorWithRed:88.0/255.0 green:75.0/255.0 blue:103.0/255.0 alpha:1.0f]\n#define SCBrown        [UIColor colorWithRed:119.0/255.0 green:107.0/255.0 blue:95.0/255.0 alpha:1.0f]\n#define SCBlue         [UIColor colorWithRed:82.0/255.0 green:116.0/255.0 blue:188.0/255.0 alpha:1.0f]\n#define SCDarkBlue     [UIColor colorWithRed:121.0/255.0 green:134.0/255.0 blue:142.0/255.0 alpha:1.0f]\n#define SCYellow       [UIColor colorWithRed:242.0/255.0 green:197.0/255.0 blue:117.0/255.0 alpha:1.0f]\n#define SCWhite        [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0f]\n#define SCDeepGrey     [UIColor colorWithRed:99.0/255.0 green:99.0/255.0 blue:99.0/255.0 alpha:1.0f]\n#define SCPinkGrey     [UIColor colorWithRed:200.0/255.0 green:193.0/255.0 blue:193.0/255.0 alpha:1.0f]\n#define SCHealYellow   [UIColor colorWithRed:245.0/255.0 green:242.0/255.0 blue:238.0/255.0 alpha:1.0f]\n#define SCLightGrey    [UIColor colorWithRed:225.0/255.0 green:225.0/255.0 blue:225.0/255.0 alpha:1.0f]\n#define SCCleanGrey    [UIColor colorWithRed:251.0/255.0 green:251.0/255.0 blue:251.0/255.0 alpha:1.0f]\n#define SCLightYellow  [UIColor colorWithRed:241.0/255.0 green:240.0/255.0 blue:240.0/255.0 alpha:1.0f]\n#define SCDarkYellow   [UIColor colorWithRed:152.0/255.0 green:150.0/255.0 blue:159.0/255.0 alpha:1.0f]\n#define SCPinkDark     [UIColor colorWithRed:170.0/255.0 green:165.0/255.0 blue:165.0/255.0 alpha:1.0f]\n#define SCCloudWhite   [UIColor colorWithRed:244.0/255.0 green:244.0/255.0 blue:244.0/255.0 alpha:1.0f]\n#define SCBlack        [UIColor colorWithRed:45.0/255.0 green:45.0/255.0 blue:45.0/255.0 alpha:1.0f]\n#define SCStarYellow   [UIColor colorWithRed:252.0/255.0 green:223.0/255.0 blue:101.0/255.0 alpha:1.0f]\n#define SCTwitterColor [UIColor colorWithRed:0.0/255.0 green:171.0/255.0 blue:243.0/255.0 alpha:1.0]\n#define SCWeiboColor   [UIColor colorWithRed:250.0/255.0 green:0.0/255.0 blue:33.0/255.0 alpha:1.0]\n#define SCiOSGreenColor [UIColor colorWithRed:98.0/255.0 green:247.0/255.0 blue:77.0/255.0 alpha:1.0]\n#define SCRandomColor   [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1.0f]\n\n//范围\nstruct Range {\n    CGFloat max;\n    CGFloat min;\n};\ntypedef struct Range CGRange;\nCG_INLINE CGRange CGRangeMake(CGFloat max, CGFloat min);\n\nCG_INLINE CGRange\nCGRangeMake(CGFloat max, CGFloat min){\n    CGRange p;\n    p.max = max;\n    p.min = min;\n    return p;\n}\n\nstatic const CGRange CGRangeZero = {0,0};\n\n@interface SCColor : NSObject\n- (UIImage *)imageFromColor:(UIColor *)color;\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCColor.m",
    "content": "//\n//  UUColor.m\n//  UUChart\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCColor.h\"\n\n@implementation SCColor\n\n-(id)init{\n    if (self = [super init]) {\n        \n    }\n    return self;\n}\n\n-(UIImage *)imageFromColor:(UIColor*)color\n{\n    CGRect rect = CGRectMake(0, 0, 1, 1);\n    UIGraphicsBeginImageContext(rect.size);\n    CGContextRef context = UIGraphicsGetCurrentContext();\n    CGContextSetFillColorWithColor(context,[color CGColor]);\n    CGContextFillRect(context, rect);\n    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();\n    UIGraphicsEndImageContext();\n    return img;\n}\n\n\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCGenericChart.h",
    "content": "//\n//  PNGenericChart.h\n//  PNChartDemo\n//\n//  Created by Andi Palo on 26/02/15.\n//  Copyright (c) 2015 kevinzhow. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\ntypedef NS_ENUM(NSUInteger, PNLegendPosition) {\n    PNLegendPositionTop = 0,\n    PNLegendPositionBottom = 1,\n    PNLegendPositionLeft = 2,\n    PNLegendPositionRight = 3\n};\n\ntypedef NS_ENUM(NSUInteger, PNLegendItemStyle) {\n    PNLegendItemStyleStacked = 0,\n    PNLegendItemStyleSerial = 1\n};\n\n@interface SCGenericChart : UIView\n\n@property (assign, nonatomic) BOOL hasLegend;\n@property (assign, nonatomic) PNLegendPosition legendPosition;\n@property (assign, nonatomic) PNLegendItemStyle legendStyle;\n\n@property (assign, nonatomic) UIFont *legendFont;\n@property (assign, nonatomic) UIColor *legendFontColor;\n@property (assign, nonatomic) NSUInteger labelRowsInSerialMode;\n\n/**\n *  returns the Legend View, or nil if no chart data is present.\n *  The origin of the legend frame is 0,0 but you can set it with setFrame:(CGRect)\n *\n *  @param mWidth Maximum width of legend. Height will depend on this and font size\n *\n *  @return UIView of Legend\n */\n- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth;\n\n\n- (void) setupDefaultValues;\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCGenericChart.m",
    "content": "//\n//  PNGenericChart.m\n//  PNChartDemo\n//\n//  Created by Andi Palo on 26/02/15.\n//  Copyright (c) 2015 kevinzhow. All rights reserved.\n//\n\n#import \"SCGenericChart.h\"\n\n@interface SCGenericChart ()\n\n\n\n@end\n\n@implementation SCGenericChart\n\n/*\n// Only override drawRect: if you perform custom drawing.\n// An empty implementation adversely affects performance during animation.\n- (void)drawRect:(CGRect)rect {\n    // Drawing code\n}\n*/\n\n- (void) setupDefaultValues{\n    self.hasLegend = YES;\n    self.legendPosition = PNLegendPositionBottom;\n    self.legendStyle = PNLegendItemStyleStacked;\n    self.labelRowsInSerialMode = 1;\n}\n\n\n\n/**\n *  to be implemented in subclass \n */\n- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth{\n    [self doesNotRecognizeSelector:_cmd];\n    return nil;\n}\n\n- (void) setLabelRowsInSerialMode:(NSUInteger)num{\n    if (self.legendStyle == PNLegendItemStyleSerial) {\n        _labelRowsInSerialMode = num;\n    }else{\n        _labelRowsInSerialMode = 1;\n    }\n}\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCLineChart.h",
    "content": "//\n//  UULineChart.h\n//  UUChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n\n#import <UIKit/UIKit.h>\n#import \"SCColor.h\"\n\n#define chartMargin     10\n#define xLabelMargin    15\n#define yLabelMargin    15\n#define UULabelHeight    10\n#define UUYLabelwidth     30\n#define UUTagLabelwidth     80\n\n@interface SCLineChart : UIView\n\n@property (strong, nonatomic) NSArray * xLabels;\n\n@property (strong, nonatomic) NSArray * yLabels;\n\n@property (strong, nonatomic) NSArray * yValues;\n\n@property (nonatomic, strong) NSArray * colors;\n\n@property (nonatomic) CGFloat xLabelWidth;\n@property (nonatomic) CGFloat yValueMin;\n@property (nonatomic) CGFloat yValueMax;\n\n@property (nonatomic, assign) CGRange markRange;\n\n@property (nonatomic, assign) CGRange chooseRange;\n\n@property (nonatomic, assign) BOOL showRange;\n\n@property (nonatomic, retain) NSMutableArray *ShowHorizonLine;\n@property (nonatomic, retain) NSMutableArray *ShowMaxMinArray;\n\n-(void)strokeChart;\n\n+ (CGSize)sizeOfString:(NSString *)text withWidth:(float)width font:(UIFont *)font;\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCLineChart.m",
    "content": "//\n//  UULineChart.m\n//  UUChartDemo\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCLineChart.h\"\n#import \"SCColor.h\"\n#import \"SCChartLabel.h\"\n#import \"SCTool.h\"\n\n@implementation SCLineChart\n\n- (id)initWithFrame:(CGRect)frame\n{\n    self = [super initWithFrame:frame];\n    if (self) {\n        // Initialization code\n        self.clipsToBounds = YES;\n    }\n    return self;\n}\n\n-(void)setYValues:(NSArray *)yValues\n{\n    _yValues = yValues;\n    [self setYLabels:yValues];\n}\n\n-(void)setYLabels:(NSArray *)yLabels\n{\n    CGFloat max = 0;\n    CGFloat min = 1000000000;\n    NSInteger rowCount = 0; // 自动计算每个图表适合的行数\n    for (NSArray * ary in yLabels) {\n        for (NSString *valueString in ary) {\n            CGFloat value = [valueString floatValue];\n            if (value > max) {\n                max = value;\n            }\n            if (value < min) {\n                min = value;\n            }\n        }\n    }\n    if (self.showRange) {\n        _yValueMin = min;\n    }else{\n        _yValueMin = 0;\n    }\n    _yValueMax = max;\n    \n    if (_chooseRange.max!=_chooseRange.min) { // 自定义数值范围\n        _yValueMax = _chooseRange.max;\n        _yValueMin = _chooseRange.min;\n    } else { // 自动计算数值范围和合适的行数\n        rowCount = [SCTool rowCountWithValueMax:_yValueMax] == 0 ? 5 : [SCTool rowCountWithValueMax:_yValueMax];\n        _yValueMax = [SCTool rangeMaxWithValueMax:_yValueMax] == 0 ? 100 : [SCTool rangeMaxWithValueMax:_yValueMax];\n        _yValueMin = 0;\n    }\n    \n    float level = (_yValueMax-_yValueMin) /rowCount; // 每个区间的差值\n    CGFloat chartCavanHeight = self.frame.size.height - UULabelHeight*3;\n    CGFloat levelHeight = chartCavanHeight /rowCount; // 每个区间的高度\n    for (int i=0; i<rowCount+1; i++) {\n        SCChartLabel * label = [[SCChartLabel alloc] initWithFrame:CGRectMake(0.0,chartCavanHeight-i*levelHeight+5, UUYLabelwidth, UULabelHeight)];\n\t\tlabel.text = [NSString stringWithFormat:@\"%g\",level * i+_yValueMin]; // 每个区间的值\n\t\t[self addSubview:label];\n    }\n    if ([super respondsToSelector:@selector(setMarkRange:)]) {\n        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(UUYLabelwidth, (1-(_markRange.max-_yValueMin)/(_yValueMax-_yValueMin))*chartCavanHeight+UULabelHeight, self.frame.size.width-UUYLabelwidth, (_markRange.max-_markRange.min)/(_yValueMax-_yValueMin)*chartCavanHeight)];\n        view.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.1];\n        [self addSubview:view];\n    }\n\n    //画横线\n    for (int i=0; i<rowCount+1; i++) {\n        if ([_ShowHorizonLine[i] integerValue]>0) {\n            \n            CAShapeLayer *shapeLayer = [CAShapeLayer layer];\n            UIBezierPath *path = [UIBezierPath bezierPath];\n            [path moveToPoint:CGPointMake(UUYLabelwidth,UULabelHeight+i*levelHeight)];\n            [path addLineToPoint:CGPointMake(self.frame.size.width,UULabelHeight+i*levelHeight)];\n            [path closePath];\n            shapeLayer.path = path.CGPath;\n            shapeLayer.strokeColor = [[[UIColor blackColor] colorWithAlphaComponent:0.1] CGColor];\n            shapeLayer.fillColor = [[UIColor whiteColor] CGColor];\n            shapeLayer.lineWidth = 1;\n            [self.layer addSublayer:shapeLayer];\n        }\n    }\n}\n\n\n-(void)setXLabels:(NSArray *)xLabels\n{\n    _xLabels = xLabels;\n    CGFloat num = 0;\n    if (xLabels.count>=20) {\n        num=20.0;\n    }else if (xLabels.count<=1){\n        num=1.0;\n    }else{\n        num = xLabels.count;\n    }\n    _xLabelWidth = (self.frame.size.width - UUYLabelwidth)/num;\n    \n    for (int i=0; i<xLabels.count; i++) {\n        NSString *labelText = xLabels[i];\n        SCChartLabel * label = [[SCChartLabel alloc] initWithFrame:CGRectMake(i * _xLabelWidth+UUYLabelwidth, self.frame.size.height - UULabelHeight, _xLabelWidth, UULabelHeight)];\n        label.text = labelText;\n        [self addSubview:label];\n    }\n    \n    //画竖线\n    for (int i=0; i<xLabels.count+1; i++) {\n        CAShapeLayer *shapeLayer = [CAShapeLayer layer];\n        UIBezierPath *path = [UIBezierPath bezierPath];\n        [path moveToPoint:CGPointMake(UUYLabelwidth+i*_xLabelWidth,UULabelHeight)];\n        [path addLineToPoint:CGPointMake(UUYLabelwidth+i*_xLabelWidth,self.frame.size.height-2*UULabelHeight)];\n        [path closePath];\n        shapeLayer.path = path.CGPath;\n        shapeLayer.strokeColor = [[[UIColor blackColor] colorWithAlphaComponent:0.1] CGColor];\n        shapeLayer.fillColor = [[UIColor whiteColor] CGColor];\n        shapeLayer.lineWidth = 1;\n        [self.layer addSublayer:shapeLayer];\n    }\n}\n\n-(void)setColors:(NSArray *)colors\n{\n\t_colors = colors;\n}\n- (void)setMarkRange:(CGRange)markRange\n{\n    _markRange = markRange;\n}\n- (void)setChooseRange:(CGRange)chooseRange\n{\n    _chooseRange = chooseRange;\n}\n- (void)setShowHorizonLine:(NSMutableArray *)ShowHorizonLine\n{\n    _ShowHorizonLine = ShowHorizonLine;\n}\n\n\n-(void)strokeChart\n{\n    for (int i=0; i<_yValues.count; i++) {\n        NSArray *childAry = _yValues[i];\n        if (childAry.count==0) {\n            return;\n        }\n        //获取最大最小位置\n        CGFloat max = [childAry[0] floatValue];\n        CGFloat min = [childAry[0] floatValue];\n        NSInteger max_i = 0;\n        NSInteger min_i = 0;\n        \n        for (int j=0; j<childAry.count; j++){\n            CGFloat num = [childAry[j] floatValue];\n            if (max<=num){\n                max = num;\n                max_i = j;\n            }\n            if (min>=num){\n                min = num;\n                min_i = j;\n            }\n        }\n        \n        //划线\n        CAShapeLayer *_chartLine = [CAShapeLayer layer];\n        _chartLine.lineCap = kCALineCapRound;\n        _chartLine.lineJoin = kCALineJoinBevel;\n        _chartLine.fillColor   = [[UIColor whiteColor] CGColor];\n        _chartLine.lineWidth   = 2.0;\n        _chartLine.strokeEnd   = 0.0;\n        [self.layer addSublayer:_chartLine];\n        \n        UIBezierPath *progressline = [UIBezierPath bezierPath];\n        CGFloat firstValue = [[childAry objectAtIndex:0] floatValue];\n        CGFloat xPosition = (UUYLabelwidth + _xLabelWidth/2.0);\n        CGFloat chartCavanHeight = self.frame.size.height - UULabelHeight*3;\n        \n        float grade = ((float)firstValue-_yValueMin) / ((float)_yValueMax-_yValueMin);\n       \n        //第一个点\n        BOOL isShowMaxAndMinPoint = YES;\n        if (self.ShowMaxMinArray) {\n            if ([self.ShowMaxMinArray[i] intValue]>0) {\n                isShowMaxAndMinPoint = (max_i==0 || min_i==0)?NO:YES;\n            }else{\n                isShowMaxAndMinPoint = YES;\n            }\n        }\n        [self addPoint:CGPointMake(xPosition, chartCavanHeight - grade * chartCavanHeight+UULabelHeight)\n                 index:i\n                isShow:isShowMaxAndMinPoint\n                 value:firstValue];\n\n        \n        [progressline moveToPoint:CGPointMake(xPosition, chartCavanHeight - grade * chartCavanHeight+UULabelHeight)];\n        [progressline setLineWidth:2.0];\n        [progressline setLineCapStyle:kCGLineCapRound];\n        [progressline setLineJoinStyle:kCGLineJoinRound];\n        NSInteger index = 0;\n        for (NSString * valueString in childAry) {\n            \n            float grade =([valueString floatValue]-_yValueMin) / ((float)_yValueMax-_yValueMin);\n            if (index != 0) {\n                \n                CGPoint point = CGPointMake(xPosition+index*_xLabelWidth, chartCavanHeight - grade * chartCavanHeight+UULabelHeight);\n                [progressline addLineToPoint:point];\n                \n                BOOL isShowMaxAndMinPoint = YES;\n                if (self.ShowMaxMinArray) {\n                    if ([self.ShowMaxMinArray[i] intValue]>0) {\n                        isShowMaxAndMinPoint = (max_i==index || min_i==index)?NO:YES;\n                    }else{\n                        isShowMaxAndMinPoint = YES;\n                    }\n                }\n                [progressline moveToPoint:point];\n                [self addPoint:point\n                         index:i\n                        isShow:isShowMaxAndMinPoint\n                         value:[valueString floatValue]];\n                \n//                [progressline stroke];\n            }\n            index += 1;\n        }\n        \n        _chartLine.path = progressline.CGPath;\n        if ([[_colors objectAtIndex:i] CGColor]) {\n            _chartLine.strokeColor = [[_colors objectAtIndex:i] CGColor];\n        }else{\n            _chartLine.strokeColor = [SCGreen CGColor];\n        }\n        CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@\"strokeEnd\"];\n        pathAnimation.duration = childAry.count*0.4;\n        pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n        pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];\n        pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];\n        pathAnimation.autoreverses = NO;\n        [_chartLine addAnimation:pathAnimation forKey:@\"strokeEndAnimation\"];\n        \n        _chartLine.strokeEnd = 1.0;\n    }\n}\n\n- (void)addPoint:(CGPoint)point index:(NSInteger)index isShow:(BOOL)isHollow value:(CGFloat)value\n{\n    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(5, 5, 8, 8)];\n    view.center = point;\n    view.layer.masksToBounds = YES;\n    view.layer.cornerRadius = 4;\n    view.layer.borderWidth = 2;\n    view.layer.borderColor = [[_colors objectAtIndex:index] CGColor]?[[_colors objectAtIndex:index] CGColor]:SCGreen.CGColor;\n    \n    if (isHollow) {\n        view.backgroundColor = [UIColor whiteColor];\n    }else{\n        view.backgroundColor = [_colors objectAtIndex:index]?[_colors objectAtIndex:index]:SCGreen;\n        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(point.x-UUTagLabelwidth/2.0, point.y-UULabelHeight*2, UUTagLabelwidth, UULabelHeight)];\n        label.font = [UIFont systemFontOfSize:10];\n        label.textAlignment = NSTextAlignmentCenter;\n        label.textColor = view.backgroundColor;\n        label.text = [NSString stringWithFormat:@\"%d\",(int)value];\n        [self addSubview:label];\n    }\n    \n    [self addSubview:view];\n}\n\n+ (CGSize)sizeOfString:(NSString *)text withWidth:(float)width font:(UIFont *)font\n{\n    NSInteger ch;\n    CGSize size = CGSizeMake(width, MAXFLOAT);\n    \n    if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {\n        NSDictionary *tdic = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];\n        size = [text boundingRectWithSize:size\n                                  options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading\n                               attributes:tdic\n                                  context:nil].size;\n    } else {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n        size = [text sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByCharWrapping];\n#pragma clang diagnostic pop\n    }\n    ch = size.height;\n    \n    return size;\n}\n\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCPieChart.h",
    "content": "//\n//  PNPieChart.h\n//  PNChartDemo\n//\n//  Created by Hang Zhang on 14-5-5.\n//  Copyright (c) 2014年 kevinzhow. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"SCPieChartDataItem.h\"\n#import \"SCGenericChart.h\"\n#import \"SCChartDelegate.h\"\n\n@interface SCPieChart : SCGenericChart\n\n- (id)initWithFrame:(CGRect)frame items:(NSArray *)items;\n\n@property (nonatomic, readonly) NSArray\t*items;\n\n/** Default is 18-point Avenir Medium. */\n@property (nonatomic) UIFont  *descriptionTextFont;\n\n/** Default is white. */\n@property (nonatomic) UIColor *descriptionTextColor;\n\n/** Default is black, with an alpha of 0.4. */\n@property (nonatomic) UIColor *descriptionTextShadowColor;\n\n/** Default is CGSizeMake(0, 1). */\n@property (nonatomic) CGSize   descriptionTextShadowOffset;\n\n/** Default is 1.0. */\n@property (nonatomic) NSTimeInterval duration;\n\n/** Show only values, this is useful when legend is present */\n@property (nonatomic) BOOL showOnlyValues;\n\n/** Show absolute values not relative i.e. percentages */\n@property (nonatomic) BOOL showAbsoluteValues;\n\n@property (nonatomic, weak) id<SCChartDelegate> delegate;\n\n- (void)updateChartByNumbers:(NSArray *)numbers;\n\n- (void)strokeChart;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCPieChart.m",
    "content": "//\n//  PNPieChart.m\n//  PNChartDemo\n//\n//  Created by Hang Zhang on 14-5-5.\n//  Copyright (c) 2014年 kevinzhow. All rights reserved.\n//\n\n#import \"SCPieChart.h\"\n//needed for the expected label size\n#import \"SCLineChart.h\"\n\n@interface SCPieChart()\n\n@property (nonatomic) NSArray *items;\n@property (nonatomic) NSArray *endPercentages;\n\n@property (nonatomic) CGFloat outerCircleRadius;\n@property (nonatomic) CGFloat innerCircleRadius;\n\n@property (nonatomic) UIView         *contentView;\n@property (nonatomic) CAShapeLayer   *pieLayer;\n@property (nonatomic) NSMutableArray *descriptionLabels;\n@property (strong, nonatomic) CAShapeLayer *sectorHighlight;\n\n- (void)loadDefault;\n\n- (UILabel *)descriptionLabelForItemAtIndex:(NSUInteger)index;\n- (SCPieChartDataItem *)dataItemForIndex:(NSUInteger)index;\n- (CGFloat)startPercentageForItemAtIndex:(NSUInteger)index;\n- (CGFloat)endPercentageForItemAtIndex:(NSUInteger)index;\n- (CGFloat)ratioForItemAtIndex:(NSUInteger)index;\n\n- (CAShapeLayer *)newCircleLayerWithRadius:(CGFloat)radius\n                               borderWidth:(CGFloat)borderWidth\n                                 fillColor:(UIColor *)fillColor\n                               borderColor:(UIColor *)borderColor\n                           startPercentage:(CGFloat)startPercentage\n                             endPercentage:(CGFloat)endPercentage;\n\n\n@end\n\n\n@implementation SCPieChart\n\n-(id)initWithFrame:(CGRect)frame items:(NSArray *)items{\n    self = [self initWithFrame:frame];\n    if(self){\n        _items = [NSArray arrayWithArray:items];\n        _outerCircleRadius  = CGRectGetWidth(self.bounds) / 2;\n        _innerCircleRadius  = CGRectGetWidth(self.bounds) / 6;\n        \n        _descriptionTextColor = [UIColor whiteColor];\n        _descriptionTextFont  = [UIFont fontWithName:@\"Avenir-Medium\" size:18.0];\n        _descriptionTextShadowColor  = [[UIColor blackColor] colorWithAlphaComponent:0.4];\n        _descriptionTextShadowOffset =  CGSizeMake(0, 1);\n        _duration = 1.0;\n        \n        [super setupDefaultValues];\n        [self loadDefault];\n    }\n    \n    return self;\n}\n\n- (void)loadDefault{\n    __block CGFloat currentTotal = 0;\n    CGFloat total = [[self.items valueForKeyPath:@\"@sum.value\"] floatValue];\n    NSMutableArray *endPercentages = [NSMutableArray new];\n    [_items enumerateObjectsUsingBlock:^(SCPieChartDataItem *item, NSUInteger idx, BOOL *stop) {\n        if (total == 0){\n            [endPercentages addObject:@(1.0 / _items.count * (idx + 1))];\n        }else{\n            currentTotal += item.value;\n            [endPercentages addObject:@(currentTotal / total)];\n        }\n    }];\n    self.endPercentages = [endPercentages copy];\n    \n    [_contentView removeFromSuperview];\n    _contentView = [[UIView alloc] initWithFrame:self.bounds];\n    [self addSubview:_contentView];\n    _descriptionLabels = [NSMutableArray new];\n    \n    _pieLayer = [CAShapeLayer layer];\n    [_contentView.layer addSublayer:_pieLayer];\n}\n\n#pragma mark -\n\n- (void)strokeChart{\n    [self loadDefault];\n    \n    SCPieChartDataItem *currentItem;\n    for (int i = 0; i < _items.count; i++) {\n        currentItem = [self dataItemForIndex:i];\n        \n        \n        CGFloat startPercnetage = [self startPercentageForItemAtIndex:i];\n        CGFloat endPercentage   = [self endPercentageForItemAtIndex:i];\n        \n        CGFloat radius = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2;\n        CGFloat borderWidth = _outerCircleRadius - _innerCircleRadius;\n        \n        CAShapeLayer *currentPieLayer =\t[self newCircleLayerWithRadius:radius\n                                                           borderWidth:borderWidth\n                                                             fillColor:[UIColor clearColor]\n                                                           borderColor:currentItem.color\n                                                       startPercentage:startPercnetage\n                                                         endPercentage:endPercentage];\n        [_pieLayer addSublayer:currentPieLayer];\n    }\n    \n    [self maskChart];\n    \n    for (int i = 0; i < _items.count; i++) {\n        UILabel *descriptionLabel =  [self descriptionLabelForItemAtIndex:i];\n        [_contentView addSubview:descriptionLabel];\n        [_descriptionLabels addObject:descriptionLabel];\n    }\n}\n\n- (UILabel *)descriptionLabelForItemAtIndex:(NSUInteger)index{\n    SCPieChartDataItem *currentDataItem = [self dataItemForIndex:index];\n    CGFloat distance = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2;\n    CGFloat centerPercentage = ([self startPercentageForItemAtIndex:index] + [self endPercentageForItemAtIndex:index])/ 2;\n    CGFloat rad = centerPercentage * 2 * M_PI;\n    \n    UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 80)];\n    NSString *titleText = currentDataItem.textDescription;\n    NSString *titleValue;\n    \n    if (self.showAbsoluteValues) {\n        titleValue = [NSString stringWithFormat:@\"%.0f\",currentDataItem.value];\n    }else{\n        titleValue = [NSString stringWithFormat:@\"%.0f%%\",[self ratioForItemAtIndex:index] * 100];\n    }\n    if(!titleText || self.showOnlyValues){\n        descriptionLabel.text = titleValue;\n    }\n    else {\n        NSString* str = [titleValue stringByAppendingString:[NSString stringWithFormat:@\"\\n%@\",titleText]];\n        descriptionLabel.text = str ;\n    }\n    \n    CGPoint center = CGPointMake(_outerCircleRadius + distance * sin(rad),\n                                 _outerCircleRadius - distance * cos(rad));\n    \n    descriptionLabel.font = _descriptionTextFont;\n    CGSize labelSize = [descriptionLabel.text sizeWithAttributes:@{NSFontAttributeName:descriptionLabel.font}];\n    descriptionLabel.frame = CGRectMake(descriptionLabel.frame.origin.x, descriptionLabel.frame.origin.y,\n                                        descriptionLabel.frame.size.width, labelSize.height);\n    descriptionLabel.numberOfLines   = 0;\n    descriptionLabel.textColor       = _descriptionTextColor;\n    descriptionLabel.shadowColor     = _descriptionTextShadowColor;\n    descriptionLabel.shadowOffset    = _descriptionTextShadowOffset;\n    descriptionLabel.textAlignment   = NSTextAlignmentCenter;\n    descriptionLabel.center          = center;\n    descriptionLabel.alpha           = 0;\n    descriptionLabel.backgroundColor = [UIColor clearColor];\n    return descriptionLabel;\n}\n\n- (SCPieChartDataItem *)dataItemForIndex:(NSUInteger)index{\n    return self.items[index];\n}\n\n- (CGFloat)startPercentageForItemAtIndex:(NSUInteger)index{\n    if(index == 0){\n        return 0;\n    }\n    \n    return [_endPercentages[index - 1] floatValue];\n}\n\n- (CGFloat)endPercentageForItemAtIndex:(NSUInteger)index{\n    return [_endPercentages[index] floatValue];\n}\n\n- (CGFloat)ratioForItemAtIndex:(NSUInteger)index{\n    return [self endPercentageForItemAtIndex:index] - [self startPercentageForItemAtIndex:index];\n}\n\n#pragma mark private methods\n\n- (CAShapeLayer *)newCircleLayerWithRadius:(CGFloat)radius\n                               borderWidth:(CGFloat)borderWidth\n                                 fillColor:(UIColor *)fillColor\n                               borderColor:(UIColor *)borderColor\n                           startPercentage:(CGFloat)startPercentage\n                             endPercentage:(CGFloat)endPercentage{\n    CAShapeLayer *circle = [CAShapeLayer layer];\n    \n    CGPoint center = CGPointMake(CGRectGetMidX(self.bounds),CGRectGetMidY(self.bounds));\n    \n    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center\n                                                        radius:radius\n                                                    startAngle:-M_PI_2\n                                                      endAngle:M_PI_2 * 3\n                                                     clockwise:YES];\n    \n    circle.fillColor   = fillColor.CGColor;\n    circle.strokeColor = borderColor.CGColor;\n    circle.strokeStart = startPercentage;\n    circle.strokeEnd   = endPercentage;\n    circle.lineWidth   = borderWidth;\n    circle.path        = path.CGPath;\n    \n    return circle;\n}\n\n- (void)maskChart{\n    CGFloat radius = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2;\n    CGFloat borderWidth = _outerCircleRadius - _innerCircleRadius;\n    CAShapeLayer *maskLayer = [self newCircleLayerWithRadius:radius\n                                                 borderWidth:borderWidth\n                                                   fillColor:[UIColor clearColor]\n                                                 borderColor:[UIColor blackColor]\n                                             startPercentage:0\n                                               endPercentage:1];\n    \n    _pieLayer.mask = maskLayer;\n    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@\"strokeEnd\"];\n    animation.duration  = _duration;\n    animation.fromValue = @0;\n    animation.toValue   = @1;\n    animation.delegate  = self;\n    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];\n    animation.removedOnCompletion = YES;\n    [maskLayer addAnimation:animation forKey:@\"circleAnimation\"];\n}\n\n- (void)createArcAnimationForLayer:(CAShapeLayer *)layer\n                            forKey:(NSString *)key\n                         fromValue:(NSNumber *)from\n                           toValue:(NSNumber *)to\n                          delegate:(id)delegate{\n    CABasicAnimation *arcAnimation = [CABasicAnimation animationWithKeyPath:key];\n    arcAnimation.fromValue         = @0;\n    arcAnimation.toValue           = to;\n    arcAnimation.delegate          = delegate;\n    arcAnimation.timingFunction    = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];\n    [layer addAnimation:arcAnimation forKey:key];\n    [layer setValue:to forKey:key];\n}\n\n- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{\n    [_descriptionLabels enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {\n        [UIView animateWithDuration:0.2 animations:^(){\n            [obj setAlpha:1];\n        }];\n    }];\n}\n\n- (void)didTouchAt:(CGPoint)touchLocation\n{\n    CGPoint circleCenter = CGPointMake(_contentView.bounds.size.width/2, _contentView.bounds.size.height/2);\n    \n    CGFloat distanceFromCenter = sqrtf(powf((touchLocation.y - circleCenter.y),2) + powf((touchLocation.x - circleCenter.x),2));\n    \n    if (distanceFromCenter < _innerCircleRadius) {\n        if ([self.delegate respondsToSelector:@selector(didUnselectPieItem)]) {\n            [self.delegate didUnselectPieItem];\n        }\n        [self.sectorHighlight removeFromSuperlayer];\n        return;\n    }\n    \n    CGFloat percentage = [self findPercentageOfAngleInCircle:circleCenter fromPoint:touchLocation];\n    int index = 0;\n    while (percentage > [self endPercentageForItemAtIndex:index]) {\n        index ++;\n    }\n\n    if ([self.delegate respondsToSelector:@selector(userClickedOnPieIndexItem:)]) {\n        [self.delegate userClickedOnPieIndexItem:index];\n    }\n    \n    if (self.sectorHighlight) {\n        [self.sectorHighlight removeFromSuperlayer];\n    }\n    SCPieChartDataItem *currentItem = [self dataItemForIndex:index];\n    \n    CGFloat red,green,blue,alpha;\n    UIColor *old = currentItem.color;\n    [old getRed:&red green:&green blue:&blue alpha:&alpha];\n    alpha /= 2;\n    UIColor *newColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n    \n    CGFloat startPercnetage = [self startPercentageForItemAtIndex:index];\n    CGFloat endPercentage   = [self endPercentageForItemAtIndex:index];\n    self.sectorHighlight =\t[self newCircleLayerWithRadius:_outerCircleRadius + 5\n                                              borderWidth:10\n                                                fillColor:[UIColor clearColor]\n                                              borderColor:newColor\n                                          startPercentage:startPercnetage\n                                            endPercentage:endPercentage];\n    [_contentView.layer addSublayer:self.sectorHighlight];\n}\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event\n{\n    for (UITouch *touch in touches) {\n        CGPoint touchLocation = [touch locationInView:_contentView];\n        [self didTouchAt:touchLocation];\n    }\n}\n\n- (CGFloat) findPercentageOfAngleInCircle:(CGPoint)center fromPoint:(CGPoint)reference{\n    //Find angle of line Passing In Reference And Center\n    CGFloat angleOfLine = atanf((reference.y - center.y) / (reference.x - center.x));\n    CGFloat percentage = (angleOfLine + M_PI/2)/(2 * M_PI);\n    return (reference.x - center.x) > 0 ? percentage : percentage + .5;\n}\n\n- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth{\n    if ([self.items count] < 1) {\n        return nil;\n    }\n    \n    /* This is a small circle that refers to the chart data */\n    CGFloat legendCircle = 16;\n    \n    CGFloat hSpacing = 0;\n    \n    CGFloat beforeLabel = legendCircle + hSpacing;\n    \n    /* x and y are the coordinates of the starting point of each legend item */\n    CGFloat x = 0;\n    CGFloat y = 0;\n    \n    /* accumulated width and height */\n    CGFloat totalWidth = 0;\n    CGFloat totalHeight = 0;\n    \n    NSMutableArray *legendViews = [[NSMutableArray alloc] init];\n    \n    /* Determine the max width of each legend item */\n    CGFloat maxLabelWidth;\n    if (self.legendStyle == PNLegendItemStyleStacked) {\n        maxLabelWidth = mWidth - beforeLabel;\n    }else{\n        maxLabelWidth = MAXFLOAT;\n    }\n    \n    /* this is used when labels wrap text and the line\n     * should be in the middle of the first row */\n    CGFloat singleRowHeight = [SCLineChart sizeOfString:@\"Test\"\n                                              withWidth:MAXFLOAT\n                                                   font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]].height;\n    \n    NSUInteger counter = 0;\n    NSUInteger rowWidth = 0;\n    NSUInteger rowMaxHeight = 0;\n    \n    for (SCPieChartDataItem *pdata in self.items) {\n        /* Expected label size*/\n        CGSize labelsize = [SCLineChart sizeOfString:pdata.textDescription\n                                           withWidth:maxLabelWidth\n                                                font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]];\n        \n        if ((rowWidth + labelsize.width + beforeLabel > mWidth)&&(self.legendStyle == PNLegendItemStyleSerial)) {\n            rowWidth = 0;\n            x = 0;\n            y += rowMaxHeight;\n            rowMaxHeight = 0;\n        }\n        rowWidth += labelsize.width + beforeLabel;\n        totalWidth = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(rowWidth, totalWidth) : fmaxf(totalWidth, labelsize.width + beforeLabel);\n        // Add inflexion type\n        [legendViews addObject:[self drawInflexion:legendCircle * .6\n                                            center:CGPointMake(x + legendCircle / 2, y + singleRowHeight / 2)\n                                          andColor:pdata.color]];\n        \n        \n        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x + beforeLabel, y, labelsize.width, labelsize.height)];\n        label.text = pdata.textDescription;\n        label.textColor = self.legendFontColor ? self.legendFontColor : [UIColor blackColor];\n        label.font = self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f];\n        label.lineBreakMode = NSLineBreakByWordWrapping;\n        label.numberOfLines = 0;\n        \n        \n        rowMaxHeight = fmaxf(rowMaxHeight, labelsize.height);\n        x += self.legendStyle == PNLegendItemStyleStacked ? 0 : labelsize.width + beforeLabel;\n        y += self.legendStyle == PNLegendItemStyleStacked ? labelsize.height : 0;\n        \n\n        totalHeight = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(totalHeight, rowMaxHeight + y) : totalHeight + labelsize.height;\n        [legendViews addObject:label];\n        counter ++;\n    }\n    \n    UIView *legend = [[UIView alloc] initWithFrame:CGRectMake(0, 0, totalWidth, totalHeight)];\n    \n    for (UIView* v in legendViews) {\n        [legend addSubview:v];\n    }\n    return legend;\n}\n\n\n- (UIImageView*)drawInflexion:(CGFloat)size center:(CGPoint)center andColor:(UIColor*)color\n{\n    //Make the size a little bigger so it includes also border stroke\n    CGSize aSize = CGSizeMake(size, size);\n    \n    \n    UIGraphicsBeginImageContextWithOptions(aSize, NO, 0.0);\n    CGContextRef context = UIGraphicsGetCurrentContext();\n    \n    CGContextAddArc(context, size/2, size/ 2, size/2, 0, M_PI*2, YES);\n\n    \n    //Set some fill color\n    CGContextSetFillColorWithColor(context, color.CGColor);\n    \n    //Finally draw\n    CGContextDrawPath(context, kCGPathFill);\n    \n    //now get the image from the context\n    UIImage *squareImage = UIGraphicsGetImageFromCurrentImageContext();\n    \n    UIGraphicsEndImageContext();\n    \n    //// Translate origin\n    CGFloat originX = center.x - (size) / 2.0;\n    CGFloat originY = center.y - (size) / 2.0;\n    \n    UIImageView *squareImageView = [[UIImageView alloc]initWithImage:squareImage];\n    [squareImageView setFrame:CGRectMake(originX, originY, size, size)];\n    return squareImageView;\n}\n\n- (void)updateChartByNumbers:(NSArray *)numbers {\n    for (SCPieChartDataItem *item in self.items) {\n        NSInteger index = [self.items indexOfObject:item];\n        if (index >= numbers.count) {\n            break;\n        }\n        item.value = [numbers[index] integerValue];\n    }\n    [self strokeChart];\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCPieChartDataItem.h",
    "content": "//\n//  PNPieChartDataItem.h\n//  PNChartDemo\n//\n//  Created by Hang Zhang on 14-5-5.\n//  Copyright (c) 2014年 kevinzhow. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n@interface SCPieChartDataItem : NSObject\n\n+ (instancetype)dataItemWithValue:(CGFloat)value\n                            color:(UIColor*)color;\n\n+ (instancetype)dataItemWithValue:(CGFloat)value\n                            color:(UIColor*)color\n                      description:(NSString *)description;\n\n@property (nonatomic) CGFloat   value;\n@property (nonatomic) UIColor  *color;\n@property (nonatomic) NSString *textDescription;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCPieChartDataItem.m",
    "content": "//\n//  PNPieChartDataItem.m\n//  PNChartDemo\n//\n//  Created by Hang Zhang on 14-5-5.\n//  Copyright (c) 2014年 kevinzhow. All rights reserved.\n//\n\n#import \"SCPieChartDataItem.h\"\n#import <UIKit/UIKit.h>\n\n@implementation SCPieChartDataItem\n\n\n+ (instancetype)dataItemWithValue:(CGFloat)value\n                            color:(UIColor*)color{\n\tSCPieChartDataItem *item = [SCPieChartDataItem new];\n\titem.value = value;\n\titem.color  = color;\n\treturn item;\n}\n\n+ (instancetype)dataItemWithValue:(CGFloat)value\n                            color:(UIColor*)color\n                      description:(NSString *)description {\n\tSCPieChartDataItem *item = [SCPieChartDataItem dataItemWithValue:value color:color];\n\titem.textDescription = description;\n\treturn item;\n}\n\n- (void)setValue:(CGFloat)value{\n    NSAssert(value >= 0, @\"value should >= 0\");\n    if (value != _value){\n        _value = value;\n    }\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCTool.h",
    "content": "//\n//  UUTool.h\n//  DataCenter\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCTool : NSObject\n/**\n *  返回图表适合分的行数(4|5|6行)\n *\n *  @param rangeMax 数组中的最大值\n *\n *  @return 图表适合分的行数\n */\n+(NSInteger)rowCountWithValueMax:(CGFloat)valueMax;\n/**\n *  返回适合图表分布的范围内最大值\n *\n *  @param rangeMax 数组中的最大值\n *\n *  @return 图表适合的范围内最大值\n */\n+(CGFloat)rangeMaxWithValueMax:(CGFloat)valueMax;\n@end\n"
  },
  {
    "path": "SCChart/SCChart/SCTool.m",
    "content": "//\n//  UUTool.m\n//  DataCenter\n//\n//  Created by 2014-763 on 15/3/12.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCTool.h\"\n\n@implementation SCTool\n\n+(NSInteger)rowCountWithValueMax:(CGFloat)valueMax {\n    NSInteger number1 = 0;\n    NSInteger number2 = 0;\n    NSInteger number3 = 0;\n    NSInteger rowCount = 0;\n    NSString *valueMaxStr = [NSString stringWithFormat:@\"%f\",valueMax];\n    for (int i = 0; i < valueMaxStr.length; i++) {\n        NSString *c = [NSString stringWithFormat:@\"%c\",[valueMaxStr characterAtIndex:i]];\n        if (![c isEqualToString:@\"0\"]&&![c isEqualToString:@\".\"]) {\n            if (number1 == 0) {\n                number1 = [c integerValue];\n                if (number1 > 2) {\n                    break;\n                }\n            } else if (number2 == 0) {\n                number2 = [c integerValue];\n                if (number2 != 2) {\n                    break;\n                }\n            } else if (number3 == 0) {\n                number3 = [c integerValue];\n                break;\n            }\n        }\n    }\n    if (number1 > 2) {\n        switch (number1) {\n            case 3:\n            case 6:\n            case 7:\n            case 9:\n                rowCount = 4;\n                break;\n            case 4:\n            case 8:\n                rowCount = 5;\n                break;\n            case 5:\n                rowCount = 6;\n            default:\n                break;\n        }\n    } else if (number1 <= 2) {\n        if (number1 == 1) {\n            switch (number2) {\n                case 0:\n                case 1:\n                case 2:\n                {\n                    if (number3 < 5) {\n                        rowCount = 5;\n                    } else if (number3 >= 5) {\n                        rowCount = 6;\n                    }\n                    break;\n                }\n                case 3:\n                case 4:\n                    rowCount = 6;\n                    break;\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 9:\n                    rowCount = 4;\n                    break;\n                default:\n                    break;\n            }\n        } else if (number1 == 2) {\n            switch (number2) {\n                case 0:\n                case 1:\n                case 2:\n                case 3:\n                case 4:\n                    rowCount = 5;\n                    break;\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 9:\n                    rowCount = 6;\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n    return rowCount;\n}\n\n+(CGFloat)rangeMaxWithValueMax:(CGFloat)valueMax {\n    NSInteger number1 = 0;\n    NSInteger number2 = 0;\n    NSInteger number3 = 0;\n    CGFloat rangeMax = 0.0;\n    NSString *valueMaxStr = [NSString stringWithFormat:@\"%f\",valueMax];\n    for (int i = 0; i < valueMaxStr.length; i++) {\n        NSString *c = [NSString stringWithFormat:@\"%c\",[valueMaxStr characterAtIndex:i]];\n        if (![c isEqualToString:@\"0\"]&&![c isEqualToString:@\".\"]) {\n            if (number1 == 0) {\n                number1 = [c integerValue];\n                if (number1 > 2) {\n                    break;\n                }\n            } else if (number2 == 0) {\n                number2 = [c integerValue];\n                if (number2 != 2) {\n                    break;\n                }\n            } else if (number3 == 0) {\n                number3 = [c integerValue];\n                break;\n            }\n        }\n    }\n    if (number1 > 2) {\n        switch (number1) {\n            case 3:\n                rangeMax = 4;\n                break;\n            case 4:\n                rangeMax = 5;\n                break;\n            case 5:\n                rangeMax = 6;\n                break;\n            case 6:\n            case 7:\n                rangeMax = 8;\n                break;\n            case 8:\n            case 9:\n                rangeMax = 10;\n                break;\n            default:\n                break;\n        }\n    } else if (number1 <= 2) {\n        if (number1 == 1) {\n            switch (number2) {\n                case 0:\n                case 1:\n                case 2:\n                {\n                    if (number3 < 5) {\n                        rangeMax = 1.25;\n                    } else if (number3 >= 5) {\n                        rangeMax = 1.5;\n                    }\n                    break;\n                }\n                case 3:\n                case 4:\n                    rangeMax = 1.5;\n                    break;\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 9:\n                    rangeMax = 2.0;\n                    break;\n                default:\n                    break;\n            }\n        } else if (number1 == 2) {\n            switch (number2) {\n                case 0:\n                case 1:\n                case 2:\n                case 3:\n                case 4:\n                    rangeMax = 2.5;\n                    break;\n                case 5:\n                case 6:\n                case 7:\n                case 8:\n                case 9:\n                    rangeMax = 3.0;\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n    CGFloat n = 1;\n    for (int i = 0; i < valueMaxStr.length; i++) {\n        if (valueMax > 1) {\n            NSString *c = [NSString stringWithFormat:@\"%c\",[valueMaxStr characterAtIndex:i]];\n            if (![c isEqualToString:@\".\"]) {\n                n = n*10;\n            } else {\n                n = n/10;\n                break;\n            }\n        } else {\n            NSString *c = [NSString stringWithFormat:@\"%c\",[valueMaxStr characterAtIndex:i]];\n            if ([c isEqualToString:@\"0\"]) {\n                n = n/10;\n            } else if (![c isEqualToString:@\".\"]){\n                break;\n            }\n        }\n    }\n    return rangeMax*n;\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChart/UICountingLabel.h",
    "content": "#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\ntypedef enum {\n    UILabelCountingMethodEaseInOut,\n    UILabelCountingMethodEaseIn,\n    UILabelCountingMethodEaseOut,\n    UILabelCountingMethodLinear\n} UILabelCountingMethod;\n\ntypedef NSString* (^UICountingLabelFormatBlock)(float value);\ntypedef NSAttributedString* (^UICountingLabelAttributedFormatBlock)(float value);\n\n@interface UICountingLabel : UILabel\n\n@property (nonatomic, strong) NSString *format;\n@property (nonatomic, assign) UILabelCountingMethod method;\n@property (nonatomic, assign) NSTimeInterval animationDuration;\n\n@property (nonatomic, copy) UICountingLabelFormatBlock formatBlock;\n@property (nonatomic, copy) UICountingLabelAttributedFormatBlock attributedFormatBlock;\n@property (nonatomic, copy) void (^completionBlock)();\n\n-(void)countFrom:(float)startValue to:(float)endValue;\n-(void)countFrom:(float)startValue to:(float)endValue withDuration:(NSTimeInterval)duration;\n\n-(void)countFromCurrentValueTo:(float)endValue;\n-(void)countFromCurrentValueTo:(float)endValue withDuration:(NSTimeInterval)duration;\n\n-(void)countFromZeroTo:(float)endValue;\n-(void)countFromZeroTo:(float)endValue withDuration:(NSTimeInterval)duration;\n\n- (CGFloat)currentValue;\n\n@end\n\n"
  },
  {
    "path": "SCChart/SCChart/UICountingLabel.m",
    "content": "#import \"UICountingLabel.h\"\n\n#if !__has_feature(objc_arc)\n#error UICountingLabel is ARC only. Either turn on ARC for the project or use -fobjc-arc flag\n#endif\n\n#pragma mark - UILabelCounter\n\n// This whole class & subclasses are private to UICountingLabel, which is why they are declared here in the .m file\n\n@interface UILabelCounter : NSObject\n\n-(float)update:(float)t;\n\n@property float rate;\n\n@end\n\n@interface UILabelCounterLinear : UILabelCounter\n\n@end\n\n@interface UILabelCounterEaseIn : UILabelCounter\n\n@end\n\n@interface UILabelCounterEaseOut : UILabelCounter\n\n@end\n\n@interface UILabelCounterEaseInOut : UILabelCounter\n\n@end\n\n@implementation  UILabelCounter\n\n-(float)update:(float)t{\n    return 0;\n}\n\n@end\n\n@implementation UILabelCounterLinear\n\n-(float)update:(float)t\n{\n    return t;\n}\n\n@end\n\n@implementation UILabelCounterEaseIn\n\n-(float)update:(float)t\n{\n    return powf(t, self.rate);\n}\n\n@end\n\n@implementation UILabelCounterEaseOut\n\n-(float)update:(float)t{\n    return 1.0-powf((1.0-t), self.rate);\n}\n\n@end\n\n@implementation UILabelCounterEaseInOut\n\n-(float) update: (float) t\n{\n\tint sign =1;\n\tint r = (int) self.rate;\n\tif (r % 2 == 0)\n\t\tsign = -1;\n\tt *= 2;\n\tif (t < 1)\n\t\treturn 0.5f * powf (t, self.rate);\n\telse\n\t\treturn sign*0.5f * (powf (t-2, self.rate) + sign*2);\n}\n\n@end\n\n#pragma mark - UICountingLabel\n\n@interface UICountingLabel ()\n\n@property float startingValue;\n@property float destinationValue;\n@property NSTimeInterval progress;\n@property NSTimeInterval lastUpdate;\n@property NSTimeInterval totalTime;\n@property float easingRate;\n\n@property (nonatomic, weak) NSTimer *timer;\n@property (nonatomic, strong) UILabelCounter *counter;\n\n@end\n\n@implementation UICountingLabel\n\n-(void)countFrom:(float)value to:(float)endValue {\n    \n    if (self.animationDuration == 0.0f) {\n        self.animationDuration = 2.0f;\n    }\n    \n    [self countFrom:value to:endValue withDuration:self.animationDuration];\n}\n\n-(void)countFrom:(float)startValue to:(float)endValue withDuration:(NSTimeInterval)duration {\n    \n    self.startingValue = startValue;\n    self.destinationValue = endValue;\n    \n    // remove any (possible) old timers\n    [self.timer invalidate];\n    self.timer = nil;\n    \n    if (duration == 0.0) {\n        // No animation\n        [self setTextValue:endValue];\n        [self runCompletionBlock];\n        return;\n    }\n\n    self.easingRate = 3.0f;\n    self.progress = 0;\n    self.totalTime = duration;\n    self.lastUpdate = [NSDate timeIntervalSinceReferenceDate];\n\n    if(self.format == nil)\n        self.format = @\"%f\";\n\n    switch(self.method)\n    {\n        case UILabelCountingMethodLinear:\n            self.counter = [[UILabelCounterLinear alloc] init];\n            break;\n        case UILabelCountingMethodEaseIn:\n            self.counter = [[UILabelCounterEaseIn alloc] init];\n            break;\n        case UILabelCountingMethodEaseOut:\n            self.counter = [[UILabelCounterEaseOut alloc] init];\n            break;\n        case UILabelCountingMethodEaseInOut:\n            self.counter = [[UILabelCounterEaseInOut alloc] init];\n            break;\n    }\n\n    self.counter.rate = 3.0f;\n\n    NSTimer *timer = [NSTimer timerWithTimeInterval:(1.0f/30.0f) target:self selector:@selector(updateValue:) userInfo:nil repeats:YES];\n    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];\n    [[NSRunLoop mainRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];\n    self.timer = timer;\n}\n\n- (void)countFromCurrentValueTo:(float)endValue {\n    [self countFrom:[self currentValue] to:endValue];\n}\n\n- (void)countFromCurrentValueTo:(float)endValue withDuration:(NSTimeInterval)duration {\n    [self countFrom:[self currentValue] to:endValue withDuration:duration];\n}\n\n- (void)countFromZeroTo:(float)endValue {\n    [self countFrom:0.0f to:endValue];\n}\n\n- (void)countFromZeroTo:(float)endValue withDuration:(NSTimeInterval)duration {\n    [self countFrom:0.0f to:endValue withDuration:duration];\n}\n\n- (void)updateValue:(NSTimer *)timer {\n    \n    // update progress\n    NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];\n    self.progress += now - self.lastUpdate;\n    self.lastUpdate = now;\n    \n    if (self.progress >= self.totalTime) {\n        [self.timer invalidate];\n        self.timer = nil;\n        self.progress = self.totalTime;\n    }\n    \n    [self setTextValue:[self currentValue]];\n    \n    if (self.progress == self.totalTime) {\n        [self runCompletionBlock];\n    }\n}\n\n- (void)setTextValue:(float)value\n{\n    if (self.attributedFormatBlock != nil) {\n        self.attributedText = self.attributedFormatBlock(value);\n    }\n    else if(self.formatBlock != nil)\n    {\n        self.text = self.formatBlock(value);\n    }\n    else\n    {\n        // check if counting with ints - cast to int\n        if([self.format rangeOfString:@\"%(.*)d\" options:NSRegularExpressionSearch].location != NSNotFound || [self.format rangeOfString:@\"%(.*)i\"].location != NSNotFound )\n        {\n            self.text = [NSString stringWithFormat:self.format,(int)value];\n        }\n        else\n        {\n            self.text = [NSString stringWithFormat:self.format,value];\n        }\n    }\n}\n\n- (void)setFormat:(NSString *)format {\n    _format = format;\n    // update label with new format\n    [self setTextValue:self.currentValue];\n}\n\n- (void)runCompletionBlock {\n    \n    if (self.completionBlock) {\n        self.completionBlock();\n        self.completionBlock = nil;\n    }\n}\n\n- (CGFloat)currentValue {\n    \n    if (self.progress >= self.totalTime) {\n        return self.destinationValue;\n    }\n    \n    CGFloat percent = self.progress / self.totalTime;\n    CGFloat updateVal = [self.counter update:percent];\n    return self.startingValue + (updateVal * (self.destinationValue - self.startingValue));\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCChartCell.h",
    "content": "//\n//  TableViewCell.h\n//  UUChartView\n//\n//  Created by shake on 15/1/4.\n//  Copyright (c) 2015年 uyiuyao. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCChartCell : UITableViewCell\n\n- (void)configUI:(NSIndexPath *)indexPath;\n\n@end\n"
  },
  {
    "path": "SCChart/SCChartCell.m",
    "content": "//\n//  TableViewCell.m\n//  UUChartView\n//\n//  Created by shake on 15/1/4.\n//  Copyright (c) 2015年 uyiuyao. All rights reserved.\n//\n\n#import \"SCChartCell.h\"\n#import \"SCChart.h\"\n\n@interface SCChartCell ()<SCChartDataSource>\n{\n    NSIndexPath *path;\n    SCChart *chartView;\n}\n@end\n\n@implementation SCChartCell\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {\n    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {\n        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];\n        [btn setTitle:@\"点击刷新数据\" forState:UIControlStateNormal];\n        btn.titleLabel.font = [UIFont systemFontOfSize:12.0];;\n        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];\n        btn.frame = CGRectMake(0, 0, SCREEN_WIDTH, 27);\n        [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:btn];\n    }\n    return self;\n}\n\n- (void)btnPressed:(id)sender {\n    [chartView strokeChart];\n}\n\n- (void)configUI:(NSIndexPath *)indexPath {\n    if (chartView) {\n        [chartView removeFromSuperview];\n        chartView = nil;\n    }\n    path = indexPath;\n    chartView = [[SCChart alloc] initwithSCChartDataFrame:CGRectMake(10, (self.frame.size.height-150)/2, [UIScreen mainScreen].bounds.size.width - 20, 150)\n                                               withSource:self\n                                                withStyle:SCChartLineStyle];\n    [chartView showInView:self.contentView];\n}\n\n- (NSArray *)getXTitles:(int)num {\n    NSMutableArray *xTitles = [NSMutableArray array];\n    for (int i=0; i<num; i++) {\n        NSString * str = [NSString stringWithFormat:@\"03-0%d\",i+1];\n        [xTitles addObject:str];\n    }\n    return xTitles;\n}\n\n#pragma mark - @required\n//横坐标标题数组\n- (NSArray *)SCChart_xLableArray:(SCChart *)chart {\n    return [self getXTitles:7];\n}\n\n//数值多重数组\n- (NSArray *)SCChart_yValueArray:(SCChart *)chart {\n    switch (path.row) {\n        case 0:\n        {\n            NSMutableArray *ary = [NSMutableArray array];\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(100);\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary addObject:str];\n            }\n            return @[ary];\n            break;\n        }\n        case 1:\n        {\n            NSMutableArray *ary = [NSMutableArray array];\n            NSMutableArray *ary2 = [NSMutableArray array];\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(1000) / 100;\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary addObject:str];\n            }\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(1000) / 100;\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary2 addObject:str];\n            }\n            return @[ary,ary2];\n            break;\n        }\n        case 2:\n        {\n            NSMutableArray *ary = [NSMutableArray array];\n            NSMutableArray *ary2 = [NSMutableArray array];\n            NSMutableArray *ary3 = [NSMutableArray array];\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(500);\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary addObject:str];\n            }\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(1000);\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary2 addObject:str];\n            }\n            for (NSInteger i = 0; i < 7; i++) {\n                CGFloat num = arc4random_uniform(2000);\n                NSString *str = [NSString stringWithFormat:@\"%f\",num];\n                [ary3 addObject:str];\n            }\n            return @[ary,ary2,ary3];\n            break;\n        }\n        default:\n            break;\n    }\n    return nil;\n}\n\n#pragma mark - @optional\n//颜色数组\n- (NSArray *)SCChart_ColorArray:(SCChart *)chart {\n    return @[SCBlue,SCRed,SCGreen];\n}\n\n#pragma mark 折线图专享功能\n//标记数值区域\n- (CGRange)SCChartMarkRangeInLineChart:(SCChart *)chart {\n    return CGRangeZero;\n}\n\n//判断显示横线条\n- (BOOL)SCChart:(SCChart *)chart ShowHorizonLineAtIndex:(NSInteger)index {\n    return YES;\n}\n\n//判断显示最大最小值\n- (BOOL)SCChart:(SCChart *)chart ShowMaxMinAtIndex:(NSInteger)index {\n    return NO;\n}\n@end\n"
  },
  {
    "path": "SCChart/SCCircleCell.h",
    "content": "//\n//  SCCircleCell.h\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/24.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCCircleCell : UITableViewCell\n\n- (void)configUI:(NSIndexPath *)indexPath;\n\n@end\n"
  },
  {
    "path": "SCChart/SCCircleCell.m",
    "content": "//\n//  SCCircleCell.m\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/24.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCCircleCell.h\"\n#import \"SCChart.h\"\n\n@interface SCCircleCell()\n{\n    SCCircleChart *chartView;\n}\n@end\n\n@implementation SCCircleCell\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {\n    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {\n        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];\n        [btn setTitle:@\"点击刷新数据\" forState:UIControlStateNormal];\n        btn.titleLabel.font = [UIFont systemFontOfSize:12.0];;\n        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];\n        btn.frame = CGRectMake(0, 0, SCREEN_WIDTH, 27);\n        [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:btn];\n    }\n    return self;\n}\n\n- (void)btnPressed:(id)sender {\n    CGFloat num = arc4random_uniform(60);\n    [chartView updateChartByCurrent:@(num)];\n}\n\n- (void)configUI:(NSIndexPath *)indexPath {\n    if (chartView) {\n        [chartView removeFromSuperview];\n        chartView = nil;\n    }\n    chartView = [[SCCircleChart alloc] initWithFrame:CGRectMake(0, (self.frame.size.height-100)/2, SCREEN_WIDTH, 100.0)\n                                               total:@100\n                                             current:@60\n                                           clockwise:YES];\n    [chartView setStrokeColor:SCBlue];\n    chartView.chartType = SCChartFormatTypeNone;\n    chartView.format = @\"无线端\\n%d%%\";\n    [chartView strokeChart];\n    [self addSubview:chartView];\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCPieCell.h",
    "content": "//\n//  SCPieCell.h\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/24.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCPieCell : UITableViewCell\n\n- (void)configUI:(NSIndexPath *)indexPath;\n\n@end\n"
  },
  {
    "path": "SCChart/SCPieCell.m",
    "content": "//\n//  SCPieCell.m\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/24.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCPieCell.h\"\n#import \"SCChart.h\"\n\n@interface SCPieCell()\n{\n    SCPieChart *chartView;\n}\n@end\n\n@implementation SCPieCell\n\n- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {\n    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {\n        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];\n        [btn setTitle:@\"点击刷新数据\" forState:UIControlStateNormal];\n        btn.titleLabel.font = [UIFont systemFontOfSize:12.0];;\n        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];\n        btn.frame = CGRectMake(0, 0, SCREEN_WIDTH, 27);\n        [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];\n        [self addSubview:btn];\n    }\n    return self;\n}\n\n- (void)btnPressed:(id)sender {\n    NSMutableArray *ary = [NSMutableArray array];\n    for (NSInteger i = 0; i < 3; i++) {\n        CGFloat num = arc4random_uniform(100);\n        NSString *str = [NSString stringWithFormat:@\"%f\",num];\n        [ary addObject:str];\n    }\n    [chartView updateChartByNumbers:ary];\n}\n\n- (void)configUI:(NSIndexPath *)indexPath {\n    if (chartView) {\n        [chartView removeFromSuperview];\n        chartView = nil;\n    }\n    NSArray *items = @[[SCPieChartDataItem dataItemWithValue:10 color:SCRed description:@\"A\"],\n                       [SCPieChartDataItem dataItemWithValue:20 color:SCBlue description:@\"B\"],\n                       [SCPieChartDataItem dataItemWithValue:40 color:SCGreen description:@\"C\"],\n                       ];\n    \n    chartView = [[SCPieChart alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-150)/2, (self.frame.size.height-150)/2, 150.0, 150.0) items:items];\n    chartView.descriptionTextColor = [UIColor whiteColor];\n    chartView.descriptionTextFont  = [UIFont fontWithName:@\"Avenir-Medium\" size:12.0];\n    [chartView strokeChart];\n    [self addSubview:chartView];\n}\n\n@end\n"
  },
  {
    "path": "SCChart/SCViewController.h",
    "content": "//\n//  SCViewController.h\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SCViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "SCChart/SCViewController.m",
    "content": "//\n//  SCViewController.m\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import \"SCViewController.h\"\n#import \"SCChartCell.h\"\n#import \"SCBarCell.h\"\n#import \"SCCircleCell.h\"\n#import \"SCPieCell.h\"\n\n@interface SCViewController () <UITableViewDataSource, UITableViewDelegate>\n\n@end\n\n@implementation SCViewController\nstatic NSString *reuseIdentifierChart = @\"SCChartCell\";\nstatic NSString *reuseIdentifierBar = @\"SCBarCell\";\nstatic NSString *reuseIdentifierCircle = @\"SCCircleCell\";\nstatic NSString *reuseIdentifierPie = @\"SCPieCell\";\n\n- (BOOL)prefersStatusBarHidden {\n    return YES;\n}\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];\n    tableView.delegate = self;\n    tableView.dataSource = self;\n    [tableView registerClass:[SCChartCell class] forCellReuseIdentifier:reuseIdentifierChart];\n    [tableView registerClass:[SCBarCell class] forCellReuseIdentifier:reuseIdentifierBar];\n    [tableView registerClass:[SCCircleCell class] forCellReuseIdentifier:reuseIdentifierCircle];\n    [tableView registerClass:[SCPieCell class] forCellReuseIdentifier:reuseIdentifierPie];\n    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;\n    [self.view addSubview:tableView];\n    \n}\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\n    return 4;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    switch (section) {\n        case 0:\n            return 3;\n            break;\n        case 1:\n            return 2;\n            break;\n        case 2:\n            return 1;\n            break;\n        case 3:\n            return 1;\n            break;\n        default:\n            return 0;\n            break;\n    }\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    switch (indexPath.section) {\n        case 0:\n        {\n            SCChartCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifierChart forIndexPath:indexPath];\n            if (!cell) {\n                cell = [[SCChartCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifierChart];\n            }\n            [cell configUI:indexPath];\n            cell.selectionStyle = UITableViewCellSelectionStyleNone;\n            return cell;\n        }\n            break;\n            \n        case 1:\n        {\n            SCBarCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifierBar forIndexPath:indexPath];\n            if (!cell) {\n                cell = [[SCBarCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifierBar];\n            }\n            [cell configUI:indexPath];\n            cell.selectionStyle = UITableViewCellSelectionStyleNone;\n            return cell;\n        }\n            break;\n            \n        case 2:\n        {\n            SCChartCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifierCircle forIndexPath:indexPath];\n            if (!cell) {\n                cell = [[SCChartCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifierCircle];\n            }\n            [cell configUI:indexPath];\n            cell.selectionStyle = UITableViewCellSelectionStyleNone;\n            return cell;\n        }\n            break;\n\n        case 3:\n        {\n            SCPieCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifierPie forIndexPath:indexPath];\n            if (!cell) {\n                cell = [[SCPieCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifierPie];\n            }\n            [cell configUI:indexPath];\n            cell.selectionStyle = UITableViewCellSelectionStyleNone;\n            return cell;\n        }\n            break;\n\n        default:\n            break;\n    }\n    return nil;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {\n    return 200;\n}\n\n- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {\n    CGRect frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width , 30);\n    UILabel *label = [[UILabel alloc]initWithFrame:frame];\n    label.font = [UIFont systemFontOfSize:14];\n    label.backgroundColor = [[UIColor lightGrayColor]colorWithAlphaComponent:0.3];\n    switch (section) {\n        case 0:\n            label.text = @\"折线图\";\n            break;\n        case 1:\n            label.text = @\"柱状图\";\n            break;\n        case 2:\n            label.text = @\"圆形图\";\n            break;\n        case 3:\n            label.text = @\"圆饼图\";\n            break;\n        default:\n            break;\n    }\n    label.textColor = [UIColor colorWithRed:0.257 green:0.650 blue:0.478 alpha:1.000];\n    label.textAlignment = NSTextAlignmentCenter;\n    return label;\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {\n    return 30;\n}\n\n@end\n"
  },
  {
    "path": "SCChart/main.m",
    "content": "//\n//  main.m\n//  SCChart\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "SCChart.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t250383A81AB2C9D80034BB22 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383A71AB2C9D80034BB22 /* main.m */; };\n\t\t250383AB1AB2C9D80034BB22 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383AA1AB2C9D80034BB22 /* AppDelegate.m */; };\n\t\t250383B31AB2C9D80034BB22 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 250383B21AB2C9D80034BB22 /* Images.xcassets */; };\n\t\t250383B61AB2C9D80034BB22 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 250383B41AB2C9D80034BB22 /* LaunchScreen.xib */; };\n\t\t250383C21AB2C9D80034BB22 /* SCChartTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383C11AB2C9D80034BB22 /* SCChartTests.m */; };\n\t\t250383CD1AB2CA300034BB22 /* SCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383CC1AB2CA300034BB22 /* SCViewController.m */; };\n\t\t250383F31AB2CAA50034BB22 /* SCBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383E61AB2CAA50034BB22 /* SCBar.m */; };\n\t\t250383F41AB2CAA50034BB22 /* SCBarChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383E81AB2CAA50034BB22 /* SCBarChart.m */; };\n\t\t250383F51AB2CAA50034BB22 /* SCChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383EA1AB2CAA50034BB22 /* SCChart.m */; };\n\t\t250383F61AB2CAA50034BB22 /* SCChartLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383EC1AB2CAA50034BB22 /* SCChartLabel.m */; };\n\t\t250383F71AB2CAA50034BB22 /* SCColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383EE1AB2CAA50034BB22 /* SCColor.m */; };\n\t\t250383F81AB2CAA50034BB22 /* SCLineChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383F01AB2CAA50034BB22 /* SCLineChart.m */; };\n\t\t250383F91AB2CAA50034BB22 /* SCTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383F21AB2CAA50034BB22 /* SCTool.m */; };\n\t\t250383FE1AB2CCFB0034BB22 /* SCBarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383FB1AB2CCFB0034BB22 /* SCBarCell.m */; };\n\t\t250383FF1AB2CCFB0034BB22 /* SCChartCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 250383FD1AB2CCFB0034BB22 /* SCChartCell.m */; };\n\t\t25FA1F3C1AC15F4300F4C43F /* SCCircleChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F3B1AC15F4300F4C43F /* SCCircleChart.m */; };\n\t\t25FA1F3F1AC15F4B00F4C43F /* UICountingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F3E1AC15F4B00F4C43F /* UICountingLabel.m */; };\n\t\t25FA1F421AC161BF00F4C43F /* SCCircleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F411AC161BF00F4C43F /* SCCircleCell.m */; };\n\t\t25FA1F511AC1708800F4C43F /* SCPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F4E1AC1708800F4C43F /* SCPieChart.m */; };\n\t\t25FA1F521AC1708800F4C43F /* SCPieChartDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F501AC1708800F4C43F /* SCPieChartDataItem.m */; };\n\t\t25FA1F551AC170B200F4C43F /* SCPieCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F541AC170B200F4C43F /* SCPieCell.m */; };\n\t\t25FA1F581AC1718200F4C43F /* SCGenericChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 25FA1F571AC1718200F4C43F /* SCGenericChart.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t250383BC1AB2C9D80034BB22 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 2503839A1AB2C9D80034BB22 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 250383A11AB2C9D80034BB22;\n\t\t\tremoteInfo = SCChart;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t250383A21AB2C9D80034BB22 /* SCChart.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SCChart.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t250383A61AB2C9D80034BB22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t250383A71AB2C9D80034BB22 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t250383A91AB2C9D80034BB22 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t250383AA1AB2C9D80034BB22 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t250383B21AB2C9D80034BB22 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t250383B51AB2C9D80034BB22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t250383BB1AB2C9D80034BB22 /* SCChartTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SCChartTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t250383C01AB2C9D80034BB22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t250383C11AB2C9D80034BB22 /* SCChartTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SCChartTests.m; sourceTree = \"<group>\"; };\n\t\t250383CB1AB2CA300034BB22 /* SCViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCViewController.h; sourceTree = \"<group>\"; };\n\t\t250383CC1AB2CA300034BB22 /* SCViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCViewController.m; sourceTree = \"<group>\"; };\n\t\t250383E51AB2CAA50034BB22 /* SCBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCBar.h; sourceTree = \"<group>\"; };\n\t\t250383E61AB2CAA50034BB22 /* SCBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCBar.m; sourceTree = \"<group>\"; };\n\t\t250383E71AB2CAA50034BB22 /* SCBarChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCBarChart.h; sourceTree = \"<group>\"; };\n\t\t250383E81AB2CAA50034BB22 /* SCBarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCBarChart.m; sourceTree = \"<group>\"; };\n\t\t250383E91AB2CAA50034BB22 /* SCChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCChart.h; sourceTree = \"<group>\"; };\n\t\t250383EA1AB2CAA50034BB22 /* SCChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCChart.m; sourceTree = \"<group>\"; };\n\t\t250383EB1AB2CAA50034BB22 /* SCChartLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCChartLabel.h; sourceTree = \"<group>\"; };\n\t\t250383EC1AB2CAA50034BB22 /* SCChartLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCChartLabel.m; sourceTree = \"<group>\"; };\n\t\t250383ED1AB2CAA50034BB22 /* SCColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCColor.h; sourceTree = \"<group>\"; };\n\t\t250383EE1AB2CAA50034BB22 /* SCColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCColor.m; sourceTree = \"<group>\"; };\n\t\t250383EF1AB2CAA50034BB22 /* SCLineChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCLineChart.h; sourceTree = \"<group>\"; };\n\t\t250383F01AB2CAA50034BB22 /* SCLineChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCLineChart.m; sourceTree = \"<group>\"; };\n\t\t250383F11AB2CAA50034BB22 /* SCTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCTool.h; sourceTree = \"<group>\"; };\n\t\t250383F21AB2CAA50034BB22 /* SCTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCTool.m; sourceTree = \"<group>\"; };\n\t\t250383FA1AB2CCFB0034BB22 /* SCBarCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCBarCell.h; sourceTree = \"<group>\"; };\n\t\t250383FB1AB2CCFB0034BB22 /* SCBarCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCBarCell.m; sourceTree = \"<group>\"; };\n\t\t250383FC1AB2CCFB0034BB22 /* SCChartCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCChartCell.h; sourceTree = \"<group>\"; };\n\t\t250383FD1AB2CCFB0034BB22 /* SCChartCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCChartCell.m; sourceTree = \"<group>\"; };\n\t\t25FA1F3A1AC15F4300F4C43F /* SCCircleChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCCircleChart.h; sourceTree = \"<group>\"; };\n\t\t25FA1F3B1AC15F4300F4C43F /* SCCircleChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCCircleChart.m; sourceTree = \"<group>\"; };\n\t\t25FA1F3D1AC15F4B00F4C43F /* UICountingLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICountingLabel.h; sourceTree = \"<group>\"; };\n\t\t25FA1F3E1AC15F4B00F4C43F /* UICountingLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICountingLabel.m; sourceTree = \"<group>\"; };\n\t\t25FA1F401AC161BF00F4C43F /* SCCircleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCCircleCell.h; sourceTree = \"<group>\"; };\n\t\t25FA1F411AC161BF00F4C43F /* SCCircleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCCircleCell.m; sourceTree = \"<group>\"; };\n\t\t25FA1F4D1AC1708800F4C43F /* SCPieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCPieChart.h; sourceTree = \"<group>\"; };\n\t\t25FA1F4E1AC1708800F4C43F /* SCPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCPieChart.m; sourceTree = \"<group>\"; };\n\t\t25FA1F4F1AC1708800F4C43F /* SCPieChartDataItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCPieChartDataItem.h; sourceTree = \"<group>\"; };\n\t\t25FA1F501AC1708800F4C43F /* SCPieChartDataItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCPieChartDataItem.m; sourceTree = \"<group>\"; };\n\t\t25FA1F531AC170B200F4C43F /* SCPieCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCPieCell.h; sourceTree = \"<group>\"; };\n\t\t25FA1F541AC170B200F4C43F /* SCPieCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCPieCell.m; sourceTree = \"<group>\"; };\n\t\t25FA1F561AC1718200F4C43F /* SCGenericChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCGenericChart.h; sourceTree = \"<group>\"; };\n\t\t25FA1F571AC1718200F4C43F /* SCGenericChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SCGenericChart.m; sourceTree = \"<group>\"; };\n\t\t25FA1F591AC1718E00F4C43F /* SCChartDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SCChartDelegate.h; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t2503839F1AB2C9D80034BB22 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t250383B81AB2C9D80034BB22 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t250383991AB2C9D80034BB22 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383A41AB2C9D80034BB22 /* SCChart */,\n\t\t\t\t250383BE1AB2C9D80034BB22 /* SCChartTests */,\n\t\t\t\t250383A31AB2C9D80034BB22 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383A31AB2C9D80034BB22 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383A21AB2C9D80034BB22 /* SCChart.app */,\n\t\t\t\t250383BB1AB2C9D80034BB22 /* SCChartTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383A41AB2C9D80034BB22 /* SCChart */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383E41AB2CAA50034BB22 /* SCChart */,\n\t\t\t\t250383A91AB2C9D80034BB22 /* AppDelegate.h */,\n\t\t\t\t250383AA1AB2C9D80034BB22 /* AppDelegate.m */,\n\t\t\t\t250383CB1AB2CA300034BB22 /* SCViewController.h */,\n\t\t\t\t250383CC1AB2CA300034BB22 /* SCViewController.m */,\n\t\t\t\t250383FC1AB2CCFB0034BB22 /* SCChartCell.h */,\n\t\t\t\t250383FD1AB2CCFB0034BB22 /* SCChartCell.m */,\n\t\t\t\t250383FA1AB2CCFB0034BB22 /* SCBarCell.h */,\n\t\t\t\t250383FB1AB2CCFB0034BB22 /* SCBarCell.m */,\n\t\t\t\t25FA1F401AC161BF00F4C43F /* SCCircleCell.h */,\n\t\t\t\t25FA1F411AC161BF00F4C43F /* SCCircleCell.m */,\n\t\t\t\t25FA1F531AC170B200F4C43F /* SCPieCell.h */,\n\t\t\t\t25FA1F541AC170B200F4C43F /* SCPieCell.m */,\n\t\t\t\t250383B21AB2C9D80034BB22 /* Images.xcassets */,\n\t\t\t\t250383B41AB2C9D80034BB22 /* LaunchScreen.xib */,\n\t\t\t\t250383A51AB2C9D80034BB22 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = SCChart;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383A51AB2C9D80034BB22 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383A61AB2C9D80034BB22 /* Info.plist */,\n\t\t\t\t250383A71AB2C9D80034BB22 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383BE1AB2C9D80034BB22 /* SCChartTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383C11AB2C9D80034BB22 /* SCChartTests.m */,\n\t\t\t\t250383BF1AB2C9D80034BB22 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = SCChartTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383BF1AB2C9D80034BB22 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383C01AB2C9D80034BB22 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t250383E41AB2CAA50034BB22 /* SCChart */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t250383E91AB2CAA50034BB22 /* SCChart.h */,\n\t\t\t\t250383EA1AB2CAA50034BB22 /* SCChart.m */,\n\t\t\t\t250383EF1AB2CAA50034BB22 /* SCLineChart.h */,\n\t\t\t\t250383F01AB2CAA50034BB22 /* SCLineChart.m */,\n\t\t\t\t250383E71AB2CAA50034BB22 /* SCBarChart.h */,\n\t\t\t\t250383E81AB2CAA50034BB22 /* SCBarChart.m */,\n\t\t\t\t25FA1F3A1AC15F4300F4C43F /* SCCircleChart.h */,\n\t\t\t\t25FA1F3B1AC15F4300F4C43F /* SCCircleChart.m */,\n\t\t\t\t25FA1F4D1AC1708800F4C43F /* SCPieChart.h */,\n\t\t\t\t25FA1F4E1AC1708800F4C43F /* SCPieChart.m */,\n\t\t\t\t250383E51AB2CAA50034BB22 /* SCBar.h */,\n\t\t\t\t250383E61AB2CAA50034BB22 /* SCBar.m */,\n\t\t\t\t250383EB1AB2CAA50034BB22 /* SCChartLabel.h */,\n\t\t\t\t250383EC1AB2CAA50034BB22 /* SCChartLabel.m */,\n\t\t\t\t250383ED1AB2CAA50034BB22 /* SCColor.h */,\n\t\t\t\t250383EE1AB2CAA50034BB22 /* SCColor.m */,\n\t\t\t\t250383F11AB2CAA50034BB22 /* SCTool.h */,\n\t\t\t\t250383F21AB2CAA50034BB22 /* SCTool.m */,\n\t\t\t\t25FA1F3D1AC15F4B00F4C43F /* UICountingLabel.h */,\n\t\t\t\t25FA1F3E1AC15F4B00F4C43F /* UICountingLabel.m */,\n\t\t\t\t25FA1F4F1AC1708800F4C43F /* SCPieChartDataItem.h */,\n\t\t\t\t25FA1F501AC1708800F4C43F /* SCPieChartDataItem.m */,\n\t\t\t\t25FA1F561AC1718200F4C43F /* SCGenericChart.h */,\n\t\t\t\t25FA1F571AC1718200F4C43F /* SCGenericChart.m */,\n\t\t\t\t25FA1F591AC1718E00F4C43F /* SCChartDelegate.h */,\n\t\t\t);\n\t\t\tpath = SCChart;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t250383A11AB2C9D80034BB22 /* SCChart */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 250383C51AB2C9D80034BB22 /* Build configuration list for PBXNativeTarget \"SCChart\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t2503839E1AB2C9D80034BB22 /* Sources */,\n\t\t\t\t2503839F1AB2C9D80034BB22 /* Frameworks */,\n\t\t\t\t250383A01AB2C9D80034BB22 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = SCChart;\n\t\t\tproductName = SCChart;\n\t\t\tproductReference = 250383A21AB2C9D80034BB22 /* SCChart.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t250383BA1AB2C9D80034BB22 /* SCChartTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 250383C81AB2C9D80034BB22 /* Build configuration list for PBXNativeTarget \"SCChartTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t250383B71AB2C9D80034BB22 /* Sources */,\n\t\t\t\t250383B81AB2C9D80034BB22 /* Frameworks */,\n\t\t\t\t250383B91AB2C9D80034BB22 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t250383BD1AB2C9D80034BB22 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = SCChartTests;\n\t\t\tproductName = SCChartTests;\n\t\t\tproductReference = 250383BB1AB2C9D80034BB22 /* SCChartTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t2503839A1AB2C9D80034BB22 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = SC;\n\t\t\t\tLastUpgradeCheck = 0610;\n\t\t\t\tORGANIZATIONNAME = meilishuo;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t250383A11AB2C9D80034BB22 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t};\n\t\t\t\t\t250383BA1AB2C9D80034BB22 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1;\n\t\t\t\t\t\tTestTargetID = 250383A11AB2C9D80034BB22;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 2503839D1AB2C9D80034BB22 /* Build configuration list for PBXProject \"SCChart\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 250383991AB2C9D80034BB22;\n\t\t\tproductRefGroup = 250383A31AB2C9D80034BB22 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t250383A11AB2C9D80034BB22 /* SCChart */,\n\t\t\t\t250383BA1AB2C9D80034BB22 /* SCChartTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t250383A01AB2C9D80034BB22 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t250383B61AB2C9D80034BB22 /* LaunchScreen.xib in Resources */,\n\t\t\t\t250383B31AB2C9D80034BB22 /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t250383B91AB2C9D80034BB22 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t2503839E1AB2C9D80034BB22 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t250383F61AB2CAA50034BB22 /* SCChartLabel.m in Sources */,\n\t\t\t\t250383FF1AB2CCFB0034BB22 /* SCChartCell.m in Sources */,\n\t\t\t\t250383F91AB2CAA50034BB22 /* SCTool.m in Sources */,\n\t\t\t\t25FA1F3F1AC15F4B00F4C43F /* UICountingLabel.m in Sources */,\n\t\t\t\t25FA1F421AC161BF00F4C43F /* SCCircleCell.m in Sources */,\n\t\t\t\t25FA1F511AC1708800F4C43F /* SCPieChart.m in Sources */,\n\t\t\t\t25FA1F521AC1708800F4C43F /* SCPieChartDataItem.m in Sources */,\n\t\t\t\t250383FE1AB2CCFB0034BB22 /* SCBarCell.m in Sources */,\n\t\t\t\t250383F71AB2CAA50034BB22 /* SCColor.m in Sources */,\n\t\t\t\t250383AB1AB2C9D80034BB22 /* AppDelegate.m in Sources */,\n\t\t\t\t250383F41AB2CAA50034BB22 /* SCBarChart.m in Sources */,\n\t\t\t\t250383F31AB2CAA50034BB22 /* SCBar.m in Sources */,\n\t\t\t\t250383F81AB2CAA50034BB22 /* SCLineChart.m in Sources */,\n\t\t\t\t25FA1F3C1AC15F4300F4C43F /* SCCircleChart.m in Sources */,\n\t\t\t\t250383CD1AB2CA300034BB22 /* SCViewController.m in Sources */,\n\t\t\t\t250383F51AB2CAA50034BB22 /* SCChart.m in Sources */,\n\t\t\t\t25FA1F551AC170B200F4C43F /* SCPieCell.m in Sources */,\n\t\t\t\t25FA1F581AC1718200F4C43F /* SCGenericChart.m in Sources */,\n\t\t\t\t250383A81AB2C9D80034BB22 /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t250383B71AB2C9D80034BB22 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t250383C21AB2C9D80034BB22 /* SCChartTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t250383BD1AB2C9D80034BB22 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 250383A11AB2C9D80034BB22 /* SCChart */;\n\t\t\ttargetProxy = 250383BC1AB2C9D80034BB22 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t250383B41AB2C9D80034BB22 /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t250383B51AB2C9D80034BB22 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t250383C31AB2C9D80034BB22 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t250383C41AB2C9D80034BB22 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.1;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t250383C61AB2C9D80034BB22 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = SCChart/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t250383C71AB2C9D80034BB22 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = SCChart/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t250383C91AB2C9D80034BB22 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = SCChartTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/SCChart.app/SCChart\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t250383CA1AB2C9D80034BB22 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = SCChartTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/SCChart.app/SCChart\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t2503839D1AB2C9D80034BB22 /* Build configuration list for PBXProject \"SCChart\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t250383C31AB2C9D80034BB22 /* Debug */,\n\t\t\t\t250383C41AB2C9D80034BB22 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t250383C51AB2C9D80034BB22 /* Build configuration list for PBXNativeTarget \"SCChart\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t250383C61AB2C9D80034BB22 /* Debug */,\n\t\t\t\t250383C71AB2C9D80034BB22 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t250383C81AB2C9D80034BB22 /* Build configuration list for PBXNativeTarget \"SCChartTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t250383C91AB2C9D80034BB22 /* Debug */,\n\t\t\t\t250383CA1AB2C9D80034BB22 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 2503839A1AB2C9D80034BB22 /* Project object */;\n}\n"
  },
  {
    "path": "SCChartTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.meilishuo.bizfe.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "SCChartTests/SCChartTests.m",
    "content": "//\n//  SCChartTests.m\n//  SCChartTests\n//\n//  Created by 2014-763 on 15/3/13.\n//  Copyright (c) 2015年 meilishuo. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n@interface SCChartTests : XCTestCase\n\n@end\n\n@implementation SCChartTests\n\n- (void)setUp {\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // This is an example of a functional test case.\n    XCTAssert(YES, @\"Pass\");\n}\n\n- (void)testPerformanceExample {\n    // This is an example of a performance test case.\n    [self measureBlock:^{\n        // Put the code you want to measure the time of here.\n    }];\n}\n\n@end\n"
  }
]