2013-06-02 124 views
0

所以我遇到了Coreplot的問題。將Coreplot圖形UIViewController添加到另一個UIViewController的視圖

我目前正試圖添加我在我的UIViewController子視圖中實現的Coreplot圖形。

我在UIViewCOntroller類中實現了Coreplot圖並試圖將coreplot viewcontroller的「.view」添加到另一個Viewcontroller的子視圖中。

ScatterPlotViewController *scatterPlot = [[ScatterPlotViewController alloc] init]; 
[graphView addSubview:scatterPlot.view]; 

其中graphview是我的主視圖控制器中的一些其他人的小uiview。

CorePlot example

的例子實現了一個圖3,但目前我只是實現的一個(散點圖)不使用故事板。精細的圖形顯示,當我問主視圖控制器推到另一個視圖 - 控制

ScatterPlotViewController *scatter = [[ScatterPlotViewController alloc] init]; 
[self.navigationController pushViewController:scatter animated:YES]; 

我失去了:(。

我試圖讀取幾個類似的問題,但所有導致我使用HOSTVIEW或

graphView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:CGRectMake(120, 296, 200, 120)]; 
graphView.backgroundColor = [UIColor redColor]; 
[self.view addSubview:graphView]; 

ScatterPlotViewController *scatterPlot = [[ScatterPlotViewController alloc] init]; 
[graphView.hostedGraph.hostingView addSubview:scatterPlot.hostView.inputView]; 

我已經改變了這個繞了幾圈,channging

scatterPlot.hostView.inputView to scatterPlot.view 

變化

​​

和其他幾個。

這是我使用的類的完整代碼,它基本上是教程鏈接中使用的整個代碼。我也沒有使用教程等故事板。我只是使用了代碼。

.H

#import <UIKit/UIKit.h> 
#import "CorePlot-CocoaTouch.h" 
#import "CPDConstants.h" 
#import "CPDStockPriceStore.h" 

@interface ScatterPlotViewController : UIViewController <CPTPlotDataSource> 

@property (nonatomic, strong) CPTGraphHostingView *hostView; 

.M

#import "ScatterPlotViewController.h" 

@implementation ScatterPlotViewController 

@synthesize hostView = hostView_; 

-(void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - UIViewController lifecycle methods 
-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self initPlot]; 
} 

#pragma mark - Chart behavior 
-(void)initPlot { 
    [self configureHost]; 
    [self configureGraph]; 
    [self configurePlots]; 
    [self configureAxes]; 
} 

-(void)configureHost { 
    self.hostView = [(CPTGraphHostingView *) [CPTGraphHostingView alloc] initWithFrame:self.view.bounds]; 
    self.hostView.allowPinchScaling = YES; 
    [self.view addSubview:self.hostView]; 
} 

-(void)configureGraph { 


    // 1 - Create the graph 
    CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.hostView.bounds]; 
    [graph applyTheme:[CPTTheme themeNamed:kCPTDarkGradientTheme]]; 
    self.hostView.hostedGraph = graph; 


    // 2 - Set graph title 
    NSString *title = @"Portfolio Prices: April 2012"; 
    graph.title = title; 


    // 3 - Create and set text style 
    CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle]; 
    titleStyle.color = [CPTColor whiteColor]; 
    titleStyle.fontName = @"Helvetica-Bold"; 
    titleStyle.fontSize = 16.0f; 
    graph.titleTextStyle = titleStyle; 
    graph.titlePlotAreaFrameAnchor = CPTRectAnchorTop; 
    graph.titleDisplacement = CGPointMake(0.0f, 10.0f); 


    // 4 - Set padding for plot area 
    [graph.plotAreaFrame setPaddingLeft:30.0f]; 
    [graph.plotAreaFrame setPaddingBottom:30.0f]; 


    // 5 - Enable user interactions for plot space 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 
    plotSpace.allowsUserInteraction = YES; 
} 

-(void)configurePlots { 


    // 1 - Get graph and plot space 
    CPTGraph *graph = self.hostView.hostedGraph; 
    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 

    // 2 - Create the three plots 
    CPTScatterPlot *aaplPlot = [[CPTScatterPlot alloc] init]; 
    aaplPlot.dataSource = self; 
    aaplPlot.identifier = CPDTickerSymbolAAPL; 
    CPTColor *aaplColor = [CPTColor redColor]; 
    [graph addPlot:aaplPlot toPlotSpace:plotSpace]; 
    CPTScatterPlot *googPlot = [[CPTScatterPlot alloc] init]; 
    googPlot.dataSource = self; 
    googPlot.identifier = CPDTickerSymbolGOOG; 
    CPTColor *googColor = [CPTColor greenColor]; 
    [graph addPlot:googPlot toPlotSpace:plotSpace]; 
    CPTScatterPlot *msftPlot = [[CPTScatterPlot alloc] init]; 
    msftPlot.dataSource = self; 
    msftPlot.identifier = CPDTickerSymbolMSFT; 
    CPTColor *msftColor = [CPTColor blueColor]; 
    [graph addPlot:msftPlot toPlotSpace:plotSpace]; 

    // 3 - Set up plot space 
    [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:aaplPlot, googPlot, msftPlot, nil]]; 
    CPTMutablePlotRange *xRange = [plotSpace.xRange mutableCopy]; 
    [xRange expandRangeByFactor:CPTDecimalFromCGFloat(1.1f)]; 
    plotSpace.xRange = xRange; 
    CPTMutablePlotRange *yRange = [plotSpace.yRange mutableCopy]; 
    [yRange expandRangeByFactor:CPTDecimalFromCGFloat(1.2f)]; 
    plotSpace.yRange = yRange; 

    // 4 - Create styles and symbols 
    CPTMutableLineStyle *aaplLineStyle = [aaplPlot.dataLineStyle mutableCopy]; 
    aaplLineStyle.lineWidth = 2.5; 
    aaplLineStyle.lineColor = aaplColor; 
    aaplPlot.dataLineStyle = aaplLineStyle; 
    CPTMutableLineStyle *aaplSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    aaplSymbolLineStyle.lineColor = aaplColor; 
    CPTPlotSymbol *aaplSymbol = [CPTPlotSymbol ellipsePlotSymbol]; 
    aaplSymbol.fill = [CPTFill fillWithColor:aaplColor]; 
    aaplSymbol.lineStyle = aaplSymbolLineStyle; 
    aaplSymbol.size = CGSizeMake(6.0f, 6.0f); 
    aaplPlot.plotSymbol = aaplSymbol; 
    CPTMutableLineStyle *googLineStyle = [googPlot.dataLineStyle mutableCopy]; 
    googLineStyle.lineWidth = 1.0; 
    googLineStyle.lineColor = googColor; 
    googPlot.dataLineStyle = googLineStyle; 
    CPTMutableLineStyle *googSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    googSymbolLineStyle.lineColor = googColor; 
    CPTPlotSymbol *googSymbol = [CPTPlotSymbol starPlotSymbol]; 
    googSymbol.fill = [CPTFill fillWithColor:googColor]; 
    googSymbol.lineStyle = googSymbolLineStyle; 
    googSymbol.size = CGSizeMake(6.0f, 6.0f); 
    googPlot.plotSymbol = googSymbol; 
    CPTMutableLineStyle *msftLineStyle = [msftPlot.dataLineStyle mutableCopy]; 
    msftLineStyle.lineWidth = 2.0; 
    msftLineStyle.lineColor = msftColor; 
    msftPlot.dataLineStyle = msftLineStyle; 
    CPTMutableLineStyle *msftSymbolLineStyle = [CPTMutableLineStyle lineStyle]; 
    msftSymbolLineStyle.lineColor = msftColor; 
    CPTPlotSymbol *msftSymbol = [CPTPlotSymbol diamondPlotSymbol]; 
    msftSymbol.fill = [CPTFill fillWithColor:msftColor]; 
    msftSymbol.lineStyle = msftSymbolLineStyle; 
    msftSymbol.size = CGSizeMake(6.0f, 6.0f); 
    msftPlot.plotSymbol = msftSymbol; 
} 

-(void)configureAxes { 
    // 1 - Create styles 
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle]; 
    axisTitleStyle.color = [CPTColor whiteColor]; 
    axisTitleStyle.fontName = @"Helvetica-Bold"; 
    axisTitleStyle.fontSize = 12.0f; 
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle]; 
    axisLineStyle.lineWidth = 2.0f; 
    axisLineStyle.lineColor = [CPTColor whiteColor]; 
    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init]; 
    axisTextStyle.color = [CPTColor whiteColor]; 
    axisTextStyle.fontName = @"Helvetica-Bold"; 
    axisTextStyle.fontSize = 11.0f; 
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle]; 
    tickLineStyle.lineColor = [CPTColor whiteColor]; 
    tickLineStyle.lineWidth = 2.0f; 
    CPTMutableLineStyle *gridLineStyle = [CPTMutableLineStyle lineStyle]; 
    tickLineStyle.lineColor = [CPTColor blackColor]; 
    tickLineStyle.lineWidth = 1.0f; 


    // 2 - Get axis set 
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet; 


    // 3 - Configure x-axis 
    CPTAxis *x = axisSet.xAxis; 
    x.title = @"Day of Month"; 
    x.titleTextStyle = axisTitleStyle; 
    x.titleOffset = 15.0f; 
    x.axisLineStyle = axisLineStyle; 
    x.labelingPolicy = CPTAxisLabelingPolicyNone; 
    x.labelTextStyle = axisTextStyle; 
    x.majorTickLineStyle = axisLineStyle; 
    x.majorTickLength = 4.0f; 
    x.tickDirection = CPTSignNegative; 
    CGFloat dateCount = [[[CPDStockPriceStore sharedInstance] datesInMonth] count]; 
    NSMutableSet *xLabels = [NSMutableSet setWithCapacity:dateCount]; 
    NSMutableSet *xLocations = [NSMutableSet setWithCapacity:dateCount]; 
    NSInteger i = 0; 
    for (NSString *date in [[CPDStockPriceStore sharedInstance] datesInMonth]) { 
     CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:date textStyle:x.labelTextStyle]; 
     CGFloat location = i++; 
     label.tickLocation = CPTDecimalFromCGFloat(location); 
     label.offset = x.majorTickLength; 
     if (label) { 
      [xLabels addObject:label]; 
      [xLocations addObject:[NSNumber numberWithFloat:location]]; 
     } 
    } 
    x.axisLabels = xLabels; 
    x.majorTickLocations = xLocations; 


    // 4 - Configure y-axis 
    CPTAxis *y = axisSet.yAxis; 
    y.title = @"Price"; 
    y.titleTextStyle = axisTitleStyle; 
    y.titleOffset = -40.0f; 
    y.axisLineStyle = axisLineStyle; 
    y.majorGridLineStyle = gridLineStyle; 
    y.labelingPolicy = CPTAxisLabelingPolicyNone; 
    y.labelTextStyle = axisTextStyle; 
    y.labelOffset = 16.0f; 
    y.majorTickLineStyle = axisLineStyle; 
    y.majorTickLength = 4.0f; 
    y.minorTickLength = 2.0f; 
    y.tickDirection = CPTSignPositive; 
    NSInteger majorIncrement = 100; 
    NSInteger minorIncrement = 50; 
    CGFloat yMax = 700.0f; // should determine dynamically based on max price 
    NSMutableSet *yLabels = [NSMutableSet set]; 
    NSMutableSet *yMajorLocations = [NSMutableSet set]; 
    NSMutableSet *yMinorLocations = [NSMutableSet set]; 
    for (NSInteger j = minorIncrement; j <= yMax; j += minorIncrement) { 
     NSUInteger mod = j % majorIncrement; 
     if (mod == 0) { 
      CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:[NSString stringWithFormat:@"%i", j] textStyle:y.labelTextStyle]; 
      NSDecimal location = CPTDecimalFromInteger(j); 
      label.tickLocation = location; 
      label.offset = -y.majorTickLength - y.labelOffset; 
      if (label) { 
       [yLabels addObject:label]; 
      } 
      [yMajorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:location]]; 
     } else { 
      [yMinorLocations addObject:[NSDecimalNumber decimalNumberWithDecimal:CPTDecimalFromInteger(j)]]; 
     } 
    } 
    y.axisLabels = yLabels; 
    y.majorTickLocations = yMajorLocations; 
    y.minorTickLocations = yMinorLocations; 
} 

#pragma mark - Rotation 
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

#pragma mark - CPTPlotDataSource methods 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
    return [[[CPDStockPriceStore sharedInstance] datesInMonth] count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { 
    NSInteger valueCount = [[[CPDStockPriceStore sharedInstance] datesInMonth] count]; 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      if (index < valueCount) { 
       return [NSNumber numberWithUnsignedInteger:index]; 
      } 
      break; 

     case CPTScatterPlotFieldY: 
      if ([plot.identifier isEqual:CPDTickerSymbolAAPL] == YES) { 
       return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolAAPL] objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:CPDTickerSymbolGOOG] == YES) { 
       return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolGOOG] objectAtIndex:index]; 
      } else if ([plot.identifier isEqual:CPDTickerSymbolMSFT] == YES) { 
       return [[[CPDStockPriceStore sharedInstance] monthlyPrices:CPDTickerSymbolMSFT] objectAtIndex:index]; 
      } 
      break; 
    } 
    return [NSDecimalNumber zero]; 
} 

任何幫助是好的!

只需要得到這個該死的應用程序正常工作:P

回答

0

放置一個視圖控制器下另一個需要特殊處理。請閱讀UIViewController class docs概述中的「實施容器視圖控制器」部分。

0

你嘗試(?):

ScatterPlotViewController *scatterPlot = [[ScatterPlotViewController alloc] init]; 
[(yourViewController *) addChildViewController:scatterPlot]; 
[graphView addSubview:scatterPlot.view]; 
[scatterPlot didMoveToParentViewController:(yourViewController *)]; 
相關問題