Chart Parameters

Description: chart and animation parameters are determined.

The ViewController.h File

#import <Charting/Chart.h>
#import "Brush.h"
#import <Charting/ColumnSeries.h>
#import <Charting/AreaSeries.h>
#import "DataSource.h"
#import <Charting/BarSeries.h>
#import "Charting/PieSeries.h"
#import "Charting/LineSeries.h"
#import "Charting/LinePoint.h"
#import "Charting/ChartTouchesDelegate.h"
#import "Charting/ChartLabel.h"
#import "Charting/ChartPoint.h"
#import "Charting/BubbleSeries.h"
#import "ChartTypes.h"
#import "Charting/ChartAnimationScale.h"
#import "Charting/ChartAnimationFade.h"
#import "Charting/ChartAnimationMove.h"
#import "Charting/ChartAnimationRotate.h"
#import "Charting/ChartAnimationPieMove.h"
#import "Charting/ChartAnimationDelegate.h"
@interface ViewController : UIViewController<ChartTouchesDelegate,ChartAnimationDelegate>{
    Chart *chart;
    float max;
    float min;
    NSMutableDictionary *m_numberFormat;
    int axisType;
    BOOL hideAxis;
    int chartType;
    NSArray *m_colors;
    DataSource *datasource;
    BOOL swipedSelection;
    CGPoint point;
    double angle;
    int rotation_count;
}
- (ChartLabel *)createDefaultLabel;
- (void) setChartSettings;
- (void) drawAllSeries;
@end

The ViewController.m File

#import &quot;ViewController.h&quot;
#define ColorWithRGBA(_r, _g, _b, _a) \
[UIColor colorWithRed:(_r) / 255.0f green:(_g) / 255.0f blue:(_b) / 255.0f alpha:(_a) / 255.0f]
@implementation ViewController
- (void)dealloc
{
    [super dealloc];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
    [super viewDidLoad];
    m_numberFormat = [[NSMutableDictionary dictionaryWithObjectsAndKeys:
                       [NSNumber numberWithBool:NO], @&quot;asInSource&quot;,
                       [NSNumber numberWithInt:2], @&quot;decNumbers&quot;,
                       [NSNumber numberWithBool:YES], @&quot;separator&quot;,
                       @&quot;&quot;, @&quot;prefix&quot;,
                       @&quot;&quot;, @&quot;suffix&quot;,
                       [NSNumber numberWithBool:NO], @&quot;negativeRed&quot;,
                       nil] retain];
    m_colors = [[NSArray arrayWithObjects:
                 ColorWithRGBA(19, 88, 138, 255 ),
                 ColorWithRGBA(109, 167, 192, 255 ),
                 ColorWithRGBA(41, 171, 226, 255 ),
                 ColorWithRGBA(0, 169, 157, 255 ),
                 ColorWithRGBA(103, 124, 139, 255 ),
                 ColorWithRGBA(221, 241, 250, 255 ),
                 ColorWithRGBA(169, 221, 243, 255 ),
                 ColorWithRGBA(102, 203, 196, 255 ),
                 ColorWithRGBA(208, 222, 232, 255 ),
                 ColorWithRGBA(190, 160, 186, 255 ),
                 nil] retain];
    // Create a chart and set size
    chart = [[Chart alloc] initWithName:@&quot;Chart&quot;];
    chart.frame=CGRectMake(0, 0, 600, 550);
    chart.backgroundColor = [UIColor whiteColor];
    chart.delegate = self;
    // Set up chart plot area
    chart.plotArea.zoomEnabled = NO;
    chart.plotArea.gridTopMost = YES;
    chart.plotArea.axesTopMost = YES;
    chart.plotArea.selectionEnabled = YES;
    chart.plotArea.selectionStart = 0.25;
    chart.plotArea.selectionEnd = 0.75;
    chart.plotArea.selectionDelegate = self;
    chart.plotArea.notelineEnabled = YES;
    chart.plotArea.notelineLabel.minWidth = 400;
    chart.plotArea.notelineThickness = 1.0;
    chart.plotArea.pieZoom = 1.0;
    chart.plotArea.isAxisBottom = NO;
    chart.plotArea.axisPosition = 0.0;
    chart.plotArea.notelineLabel.font = [UIFont fontWithName:@&quot;Arial&quot; size:12];
    GradientStop *st1 = [GradientStop gradientStopWithColor:[UIColor blueColor] offset:0.7];
    GradientStop *st2 = [GradientStop gradientStopWithColor:[UIColor blackColor] offset:1.0];
    LinearGradientBrush *linGr = [[LinearGradientBrush new] autorelease];
    linGr.startPoint = CGPointMake(0.0,0.0);
    linGr.endPoint = CGPointMake(0.0, 1.0);
    [linGr.gradientStops  addObject:st1];
    [linGr.gradientStops addObject:st2];
    chart.plotArea.selectionBrush = linGr;
    SolidColorBrush *solidBrush = [SolidColorBrush new];
    solidBrush.color = [UIColor blackColor];
    chart.plotArea.selectionSliderBrush = [solidBrush autorelease];
    // Determine title parameters
    chart.caption.text = @&quot;Chart&quot;;
    chart.caption.textColor = [UIColor blackColor];
    chart.caption.maxTextLength = 140;
    chart.caption.blockAlignment = AlignmentCenter;
    SolidColorBrush *br = [SolidColorBrush new];
    br.color = [UIColor lightGrayColor];
    // Determine legend parameters
    chart.legend.background = [br autorelease];
    chart.legend.borderRadius = 2;
    chart.legend.borderThickness = 1;
    chart.legend.font = [UIFont fontWithName:@&quot;Arial&quot; size:12];
    chart.legend.legendOrientation = LegendOrientationBottom;
    chart.legend.textColor = [UIColor blackColor];
    chart.legend.maxEntriesCount = 5;
    // Create a data source
    datasource = [[DataSource alloc] init];
    [chart setDataSource:datasource];
    // Set maximum and minimum values along Y axis for data source
    [datasource prepare];
    [self setChartSettings];
    [self drawAllSeries];
    // Execute custom example
    [self executeExample];
    [self.view addSubview:chart];
    angle = 0.0;
    rotation_count = 0;
}
// Function for example execution
-(void) executeExample{
};
- (void)drawAllSeries
{
    [chart deleteAllSeries];
    int seriesCount = datasource.countSeries;
    GradientStop *grStop = [GradientStop gradientStopWithColor:[UIColor blackColor] offset:1.0];
    for (int i = 0; i &lt; seriesCount; ++i)
    {
        LinearGradientBrush *grBrush = [[LinearGradientBrush new] autorelease];
        grBrush.startPoint = CGPointMake(0.0, 0.0);
        grBrush.endPoint = CGPointMake(1.0, 0.0);
        GradientStop *grSt = [[GradientStop new] autorelease];
        grSt.color = [m_colors objectAtIndex:i%[m_colors count]];
        grSt.offset = 0.6;
        [grBrush.gradientStops addObject:grSt];
        [grBrush.gradientStops addObject:grStop];
        ColumnSeries *ser = [[ColumnSeries new] autorelease];
        [ser setBackground:grBrush];
        ser.dataIndex = i;
        ser.fillRatio = 0.8;
        ser.defaultLabel = [self createDefaultLabel];
        [chart addSeries:ser];
    }
    [chart forceDataUpdate];
    for (ColumnSeries *cs in chart.seriesList)
    {
        for (ColumnPoint *cp in cs.points.allValues) {
            cp.borderColor = [UIColor blackColor];
            cp.borderRadius = 6.0;
            cp.borderThickness = 1.0;
        }
    }
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineX]]).valueAxisType = ValueAxisAbsolute;
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineY]]).valueAxisType = ValueAxisAbsolute;
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineX]]).visible = YES;
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineY]]).visible = YES;
}
- (void )viewDidUnload
{
    [super viewDidUnload];
}
- (BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)setChartSettings
{
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineX]]).axisThickness = 1;  //X axis thickness
    AxisTicks *t = [[AxisTicks alloc] initWithColor:[UIColor blackColor] size:3 thickness:3];
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineX]]).majorTicks = t; // Major tick marks on X axis
    ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineX]]).minorTicks.thickness = 0; // Thickness of minor tick marks on X axis
    // Y axis parameters
    ValueAxis *axisY = ((ValueAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisLineY]]);
    axisY.axisLabelsVisible = YES;
    axisY.axisLineVisible = YES;
    axisY.tickLabelLineBreak = YES;
    axisY.axisThickness = 1; // Axis thickness
    axisY.showGrid = YES; // Display grid
    axisY.gridThickness = 1; // Grid thickness
    axisY.gridColor = ColorWithRGBA(200, 200, 200, 255);
    axisY.font = [UIFont fontWithName:@&quot;Arial&quot; size:14];
    axisY.textColor = [UIColor blackColor];
    axisY.majorTicks.thickness = 1;
    axisY.majorTicks.size = 3;
    axisY.majorTicks.type = AxisTickBoth;
    axisY.majorTicks.color = [UIColor blackColor];
    axisY.majorTicks.visible = YES;
    axisY.minorTicks.thickness = 0;
    axisY.startOffset = 0.0;
    axisY.endOffset = 0.0;
    axisY.minTickSpacing = 2.0;
    axisY.isUserStep = YES;
    axisY.userStep = 5.0;
    axisY.showMaxValue = YES;
    NSMutableArray *interplacedBackground = [NSMutableArray new];
    for(int i=0;i &lt; [m_colors count]; i++)
    {
        SolidColorBrush *b = [SolidColorBrush new];
        b.color = [UIColor colorWithIntRed:(250-i*5) green:(250-i*5) blue:250 alpha:255];
        
        [interplacedBackground addObject:[b autorelease]];
    }
    axisY.interlacedBackground = interplacedBackground;
    axisY.color = [UIColor blueColor];
    // Determine timeline parameters
    TimeAxis *timeAxis = ((TimeAxis *)[chart.axes objectForKey:[NSNumber numberWithInt:AxisTypeTimeline]]);
    timeAxis.visible = NO;
    Thickness th = {10,0,0,20}; // Margins
    chart.legend.margin = th; // Legend margins
    th.bottom = 10;
    th.left = th.right = th.top = 0;
    chart.chartArea.padding = th; // Chart area margins
    chart.plotArea.selectionEnabled = NO;
}
- (ChartLabel *)createDefaultLabel
{
    ChartLabel *result = [[[ChartLabel alloc] initWithFrame:CGRectZero] autorelease]; //Create a label
    SolidColorBrush *br = [[SolidColorBrush new] autorelease];
    br.color = [UIColor whiteColor];
    result.background = br; // Set color
    result.borderColor = [UIColor blackColor]; // Border color
    result.borderThickness = 1;
    result.borderRadius = 10;
    result.font = [UIFont fontWithName:@&quot;Arial&quot; size:18]; // Font
    result.textAlignment = UITextAlignmentCenter;
    result.textColor = [UIColor blackColor];
    result.mask = [NSString stringWithFormat:@&quot;%@#FVAL%@&quot;,
                   (NSString *)[m_numberFormat objectForKey:@&quot;prefix&quot;],
                   (NSString *)[m_numberFormat objectForKey:@&quot;suffix&quot;]];
    result.countOfDecimalNumbers = [((NSNumber *)[m_numberFormat objectForKey:@&quot;decNumbers&quot;]) intValue];
    result.displayNegativesInRed = [(NSNumber *)[m_numberFormat objectForKey:@&quot;negativeRed&quot;] boolValue];
    result.hasHorizontalNoteLine = result.hasVerticalNoteLine = result.hasFootNoteLine = NO;
    result.minWidth = 0;
    result.hasFootNoteLine = YES;
    result.hasHorizontalNoteLine = YES;
    result.hasVerticalNoteLine = YES;
    result.noteLineColor = [UIColor redColor];
    result.noteLineThickness = 2.0;
    return result;
}
- (void)chartTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event sender:(id)sender{}
- (void)chartTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event sender:(id)sender{}
-(void)chartTouchesLongPressInView:(UIView *)v // Event occurs on touching the screen during 2 seconds
{
    // Refresh chart
    [chart forceDataUpdate];
}
- (void)chartTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event sender:(id)sender{}
- (void)chartTouchesPinchBeganInView:(UIView *)v withScale:(double)scale velocity:(double)velocity{}
// Move selections.
// Occurs on pressed ALT and moving the mouse up and down
- (void)chartTouchesPinchChangedInView:(UIView *)v withScale:(double)scale velocity:(double)velocity
{
    if (chart.plotArea.selectionStart &gt;= 0.0)
    {
        chart.plotArea.selectionStart -= 0.01*velocity;
        if (chart.plotArea.selectionStart &lt; 0.0)
        {
            chart.plotArea.selectionStart = 0.0;
        }
    }
    if (chart.plotArea.selectionEnd &lt;= 1.0)
    {
        chart.plotArea.selectionEnd += 0.01*velocity;
        if(chart.plotArea.selectionEnd &gt; 1.0)
        {
            chart.plotArea.selectionEnd = 1.0;
        }
    }
    [chart setNeedsLayout];
}
- (void)chartTouchesPinchEndedInView:(UIView *)v withScale:(double)scale velocity:(double)velocity
{
}
- (void)chartTouchesRotationBeganInView:(UIView *)v withRotation:(double)rotation velocity:(double)velocity  // Rotation start
{
    NSLog(@&quot;Current angle is %f&quot;, angle);
}
- (void)chartTouchesRotationChangedInView:(UIView *)v withRotation:(double)rotation velocity:(double)velocity
{}
- (void)chartTouchesRotationEndedInView:(UIView *)v withRotation:(double)rotation velocity:(double)velocity // Rotation end
{
    double tmp = (rotation * 180) / M_PI; // Rotation angle in degrees
    angle += tmp;
    NSLog(@&quot;Current angle is %f   delta is %f&quot;,angle,tmp);
}
- (void)chartSelectionChangedInPlotArea:(ChartPlotArea *)plotArea
{
    NSLog(@&quot;Selection area changed&quot;);
}
- (void)chartTouchesTapInView:(UIView *)v withPoint:(CGPoint)point
{
    UIView *sender = [v hitTest:point withEvent:nil];
    if ([sender isKindOfClass:[ChartPoint class]])
    {
        ChartPoint *pt = (ChartPoint *)sender;
        pt.showShadow = !pt.showShadow;
        pt.shadowRadius = 10.0;
        pt.shadowColor = [UIColor blueColor];
        pt.shadowOffset = CGSizeMake(1.0, 0.0);
        pt.shadowOpacity = 1.0;
        if (pt.chartLabel)
        {
            pt.chartLabelVisible = !pt.chartLabelVisible;
            if (pt.chartLabelVisible)
            {
                [pt moveAboveAllByZOrder];
            }
            else
            {
                [pt restoreZOrder];
            }
        }
        [chart setNeedsLayout];
    }
}
- (void)chartTouchesPanBeganInView:(UIView *)v withTranslation:(CGPoint)translation velocity:(CGPoint)velocity // Drag start
{
    NSLog(@&quot;BEGIN_PAN&quot;);
}
- (void)chartTouchesPanChangedInView:(UIView *)v withTranslation:(CGPoint)translation velocity:(CGPoint)velocity // If we drag, chart column is resized
{
    UIView *seriesPoint = [v hitTest:point withEvent:nil]; // Get column
    if([seriesPoint isKindOfClass:[ChartPoint class]])
    {
        if(velocity.y &gt; 0){ // If we move down, column size is reduced
            NSLog(@&quot;-&quot;);
        }
        else
        { // otherwise column size is increased
            NSLog(@&quot;+&quot;);
        }
        [chart setNeedsLayout];
    }
}
- (void)chartTouchesPanEndedInView:(UIView *)v withTranslation:(CGPoint)translation velocity:(CGPoint)velocity
{
    NSLog(@&quot;END_PAN&quot;);
}
- (void)chartTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event sender:(id)sender  // Of touch is interrupted by other event
{
    UITouch *touch = [[touches allObjects] objectAtIndex:0]; // Get touch
    point = [touch locationInView:nil];  // Find touch point
}
@end

See also:

Chart Events