2010-12-22 51 views
3

我正在使用Core Plot框架繪製餅圖,並且在繪製餅圖本身時沒有問題。然而,我需要餅圖在本質上是交互式的,即如果我點擊餅圖中的任何特定部分,它應該觸發導航到顯示該特定部分的細節的頁面。如何在Core Plot餅圖中啓用觸摸選擇區域?

我嘗試使用方法-(void)pieChart:sliceWasSelectedAtRecordIndex:,但該委託方法從未被調用。我需要什麼來啓用此觸摸互動?

回答

6

我在我的iPad應用程序中使用CorePlot 0.2.2實現了餅片選擇。你猜使用 (無效)的餅圖:sliceWasSelectedAtRecordIndex:是正確的,但也許你已經忘記 申報以下兩件事情:

  • 貴控制器聲明CPPieChartDelegate協議?
  • 您是否告訴餅圖您的控制器是其代表代表

我的視圖控制器看起來像這樣在頭聲明:

@interface YourViewController : UIViewController < CPPieChartDataSource, 
                CPPieChartDelegate, 
                ... > 
{ 
    ... 
    CPXYGraph*   pieGraph; 
    CPGraphHostingView* pieView; 
} 

@property (nonatomic, retain) IBOutlet CPGraphHostingView* pieView; 

- (void)pieChart:(CPPieChart *)plot sliceWasSelectedAtRecordIndex:(NSUInteger)index; 

@end 

(無效)時的餅圖的創建被稱爲viewDidLoad中,其中I設置數據源和委託餅圖:

-(void)viewDidLoad { 
    [self createPie]; 
} 

-(void)createPie { 
    pieGraph = [[CPXYGraph alloc] initWithFrame:CGRectZero]; 
    pieGraph.axisSet = nil; 
    self.pieView.hostedGraph = pieGraph; 

    CPPieChart *pieChart = [[CPPieChart alloc] init]; 

    // This is important in order to have your slice selection handler called! 
    pieChart.delegate = self; 

    pieChart.dataSource = self; 

    pieChart.pieRadius = 80.0; 
    [pieGraph addPlot:pieChart]; 
    [pieChart release]; 
} 

- (void)pieChart:(CPPieChart *)plot sliceWasSelectedAtRecordIndex:(NSUInteger)index { 
    // Do whatever you need when the pie slice has been selected. 
} 
+0

太糟糕了提問者從來不接受任何笑... – Reimius 2012-12-20 16:35:57

0

使用最後corePlot framework (1.4)我找不到CPPieChart但我固定CPTPieChartDelegate

@interface CPDFirstViewController : UIViewController <CPTPlotDataSource, CPTPieChartDelegate, ...> 

而且這種方法:

-(void)pieChart:(CPTPieChart *)pieChart sliceWasSelectedAtRecordIndex:(NSUInteger)index 
{ 
    // Put your action here 
} 

CPPieChartDelegate不承認任何更多的是代表從Xcode中,使用CorePlot 1.4

希望它能幫助。

DOM

+0

核心劇情類前綴從「CP」到「CPT」改變。 – 2014-01-14 02:03:35