我在xcode
中实施了core plot。我试图将图例插入另一个cell
。以下是我如何实施legend
。
- (void)configureLegend
{
CPTGraph *graph = self.hostView.hostedGraph;
CPTLegend *theLegend = [CPTLegend legendWithGraph:graph];
// Configure the legend
theLegend.numberOfColumns = 1;
theLegend.fill = [CPTFill fillWithColor:[CPTColor whiteColor]];
theLegend.borderLineStyle = [CPTLineStyle lineStyle];
theLegend.cornerRadius = 5.0;
// Add legend to graph
graph.legend = theLegend;
graph.legendAnchor = CPTRectAnchorRight;
CGFloat legendPadding = - (self.chartView.bounds.size.width / 8);
graph.legendDisplacement = CGPointMake(legendPadding, 0.0);
以下是我的尝试:
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]];
[cell addSubview:theLegend];
}
我收到以下错误:
Incompatible pointer types sending 'CPTGraph *' to parameter of type 'UIView *'
我理解错误,我做错了什么。我的问题是,如何将legend
添加为单元格的subview
?
修改
以下是我所说的:
我想移动包含所有信息的部分 - " AAPL" GOOG" " MSFT" (右边的东西),到另一个牢房。
答案 0 :(得分:1)
正如错误消息所示,您正在尝试将不属于UIView
类型的对象添加为单元格的子视图。将CTPGraph对象添加到类型为CPTGraphHostingView
的实例中,然后将其作为子视图添加到单元格中:
CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:frame];
hostingView.hostedGraph = graph;
[cell addSubview:hostingView];
此外,您不应该真正访问这样的单元格。您应该将图形作为子视图添加到UITableView的委托方法tableView:cellForRowAtIndexPath:
中。使用此方法检索图例并在返回完成的单元格之前将其添加到单元格。
已更新 - 您正在使用静态UITableView,因此cellForRowAtIndexPath:
的实现略有不同。您必须从super
(表视图)中检索单元格,而不是将可重复使用的单元格出列:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
...retrieve instance of graph...
CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:frame];
hostingView.hostedGraph = graph;
[cell addSubview:hostingView];
return cell;
}
更新2 - 仅向图片添加图例:
[cell.layer addSublayer:graph.legend];
更新3 - 您的文字可能会颠倒,因为图例图层使用的坐标系可能不同。您可以使用变换将图层旋转180度来解决此问题:
legendLayer.transform = CATransform3DMakeRotation(M_PI / 180.0f, 0, 1, 0);
答案 1 :(得分:0)
使用
CPTGraphHostingView
放在UIView里面,
答案 2 :(得分:0)
因为CPTGraph
*不是UIView *
的子类。您需要通过执行CPTGraphHostingView *hostingView
;
[cell addSubview:graph.hostingView]
添加到您的视图中