- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我贴了很多代码,但是问题比较简单:我正在尝试创建一个 CTPXYGraph 作为独立对象,然后在我拥有的另一个 ViewController 中将其用作 hostedGraph。
由于某种原因,它崩溃了! (让我使用 EXC_BAD_ACCESS 信号汇编代码)
View Controller :
RealTimePlot *plot = [[RealTimePlot alloc] init];
CTPXYGraph *graph = [plot createGraph];
self.graphHostingView.hostedGraph = graph;
图形对象:
#import "CorePlot-CocoaTouch.h"
@interface RealTimePlot : NSObject <CPTPlotDataSource>
{
NSMutableArray *dataForPlot;
}
@property (readwrite, strong) NSMutableArray *dataForPlot;
- (CPTXYGraph *) createGraph;
@end
实现:
@implementation RealTimePlot
@synthesize dataForPlot;
- (CPTXYGraph *) createGraph:
// Create graph from theme
CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTTheme *theme = [CPTTheme themeNamed:kCPTDarkGradientTheme];
[graph applyTheme:theme];
graph.paddingLeft = 10.0;
graph.paddingTop = 10.0;
graph.paddingRight = 10.0;
graph.paddingBottom = 10.0;
// Setup plot space
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.allowsUserInteraction = YES;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.0) length:CPTDecimalFromFloat(2.0)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.0) length:CPTDecimalFromFloat(3.0)];
// Axes
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x = axisSet.xAxis;
x.majorIntervalLength = CPTDecimalFromString(@"0.5");
x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"2");
x.minorTicksPerInterval = 2;
NSArray *exclusionRanges = [NSArray arrayWithObjects:
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.99) length:CPTDecimalFromFloat(0.02)],
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.99) length:CPTDecimalFromFloat(0.02)],
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(2.99) length:CPTDecimalFromFloat(0.02)],
nil];
x.labelExclusionRanges = exclusionRanges;
CPTXYAxis *y = axisSet.yAxis;
y.majorIntervalLength = CPTDecimalFromString(@"0.5");
y.minorTicksPerInterval = 5;
y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"2");
exclusionRanges = [NSArray arrayWithObjects:
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.99) length:CPTDecimalFromFloat(0.02)],
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.99) length:CPTDecimalFromFloat(0.02)],
[CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(3.99) length:CPTDecimalFromFloat(0.02)],
nil];
y.labelExclusionRanges = exclusionRanges;
// Create a blue plot area
CPTScatterPlot *boundLinePlot = [[CPTScatterPlot alloc] init];
CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
lineStyle.miterLimit = 1.0f;
lineStyle.lineWidth = 3.0f;
lineStyle.lineColor = [CPTColor blueColor];
boundLinePlot.dataLineStyle = lineStyle;
boundLinePlot.identifier = @"Blue Plot";
boundLinePlot.dataSource = self;
[graph addPlot:boundLinePlot];
// Do a blue gradient
CPTColor *areaColor1 = [CPTColor colorWithComponentRed:0.3 green:0.3 blue:1.0 alpha:0.8];
CPTGradient *areaGradient1 = [CPTGradient gradientWithBeginningColor:areaColor1 endingColor:[CPTColor clearColor]];
areaGradient1.angle = -90.0f;
CPTFill *areaGradientFill = [CPTFill fillWithGradient:areaGradient1];
boundLinePlot.areaFill = areaGradientFill;
boundLinePlot.areaBaseValue = [[NSDecimalNumber zero] decimalValue];
// Add plot symbols
CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle];
symbolLineStyle.lineColor = [CPTColor blackColor];
CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol];
plotSymbol.fill = [CPTFill fillWithColor:[CPTColor blueColor]];
plotSymbol.lineStyle = symbolLineStyle;
plotSymbol.size = CGSizeMake(10.0, 10.0);
boundLinePlot.plotSymbol = plotSymbol;
// Create a green plot area
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
lineStyle = [CPTMutableLineStyle lineStyle];
lineStyle.lineWidth = 3.f;
lineStyle.lineColor = [CPTColor greenColor];
lineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:5.0f], [NSNumber numberWithFloat:5.0f], nil];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.identifier = @"Green Plot";
dataSourceLinePlot.dataSource = self;
// Put an area gradient under the plot above
CPTColor *areaColor = [CPTColor colorWithComponentRed:0.3 green:1.0 blue:0.3 alpha:0.8];
CPTGradient *areaGradient = [CPTGradient gradientWithBeginningColor:areaColor endingColor:[CPTColor clearColor]];
areaGradient.angle = -90.0f;
areaGradientFill = [CPTFill fillWithGradient:areaGradient];
dataSourceLinePlot.areaFill = areaGradientFill;
dataSourceLinePlot.areaBaseValue = CPTDecimalFromString(@"1.75");
// Animate in the new plot, as an example
dataSourceLinePlot.opacity = 0.0f;
[graph addPlot:dataSourceLinePlot];
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.duration = 1.0f;
fadeInAnimation.removedOnCompletion = NO;
fadeInAnimation.fillMode = kCAFillModeForwards;
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
[dataSourceLinePlot addAnimation:fadeInAnimation forKey:@"animateOpacity"];
// Add some initial data
NSMutableArray *contentArray = [NSMutableArray arrayWithCapacity:100];
NSUInteger i;
for ( i = 0; i < 60; i++ ) {
id x = [NSNumber numberWithFloat:1 + i * 0.05];
id y = [NSNumber numberWithFloat:1.2 * rand() / (float)RAND_MAX + 1.2];
[contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];
}
self.dataForPlot = contentArray;
return graph;
}
最佳答案
RealTimePlot *plot = [[RealTimePlot alloc] init];
正在解除分配。
事实证明 CPTGraphHostingView 没有保留它的 hostedGraph ivar。
关于iphone - 创建 CorePlot 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607233/
有人知道如何在 CorePlot 图形中去掉绘图区域框的外边距吗?我的 iPhone 应用程序中没有太多可用空间来显示它,因此我希望绘图区域框架与整个 View 尺寸相匹配。 考虑到: 修改填充不会影
我有一个带有 CorePlot 图表的 iPhone 应用程序。我希望用户能够像默认功能一样放大和缩小图表,除了一件事: 当用户水平捏合时 -> 缩放 x 轴。 垂直 -> 缩放 y 轴。 对角线 -
在 iPhone 应用程序中,我使用核心 Plot 垂直条形图。 如何消除竖条中的阴影效果? 这里如图所示,条形图显示有阴影 这是代码: CPBarPlot *barPlot = [CPBarPlot
我正在 iPhone 上使用 CorePlot。我可以做一个简单的图表。但我想做的是让 y 轴从 0 到 100,x 轴从 1998 年到 2007 年。如果可能的话,我想保留这个数字(不是基于自定义
我有 OS X 应用程序的图表,可以随窗口调整大小。我预计当宽度减小得足够多时,图例将被截断或剪裁。然而,它溢出到绘图区域之外,如下所示。理想情况下,我希望图例截断或至少剪辑内容。如何做到这一点? 我
我想编写一个自动滚动的绘图,因此实际时间位于右侧。 (标记为红色) 数据按时间间隔不规则地添加。我怎样才能做到这一点?我已经有一个滚动图(基于 coreplot 提供的示例代码)。但它并不完全准确并且
我在当前的项目中使用CorePlot及其惊人功能。 我遇到的唯一问题是轴和网格的长度。 我只使用左侧和底部带有标签的正坐标系。 我的问题是轴和网格在标签方向上的长度。 我尝试使用: axisSet.x
我试图绘制一个散点图,经过一段时间的探索后,轴标签正确了。我将标签策略设置为none,并添加了自己的自定义标签。但是由于某种原因,即使我使用了不同的示例数据,它也只能画一条直线。这是模拟器的图形图片
我整天都在研究这个,但仍然毫 headless 绪。我制作了两个数据集并将它们放入字典中,然后将其用作绘图的数据源。一切都应该工作,但它仍然只显示一个图表。 有趣的是,如果我更改 PLOT_IDENT
我正在尝试使用 CorePlot 绘制 iPhone 上传感器收集的数据,我几乎完成了它,但是 Coreplot 的初始化非常非常慢。这是我在 viewDidLoad 方法中的代码: CPTG
在我的应用程序中,我有一个 CorePlot,它托管三个散点图,我还配置如下, let borderStyle = CPTMutableLineStyle() border
在我的应用程序中,我使用 Core-plot 库来绘制垂直条形图。当用户点击栏时,它应该导航到另一个 View Controller 。 (它将离开同一 View Controller 的实例)。当我
我希望捕获 CorePlot 中轴标签的触摸事件。我知道现有的 plot:dataLabelWasSelectedAtRecordIndex: 方法,该方法类似,但不完全是我所希望的(我想要标签,而不
我正在使用 CorePlot 的 ScatterPlot 并想创建一个图例。图例应包含一个小于等于 符号。有什么办法吗? 最佳答案 将绘图的 title 或 attributedTitle 属性设置为
我正在尝试在 CorePlot 中的 y 轴上创建水平渐变: CPTGradient *axisGradient = [CPTGradient gradientWithBeginningColor:[
有什么方法可以根据片段的大小缩放片段的文本标签/图例。例如,如果它们的分段非常小,则标签的大小/比例会减小,以免被分隔符切断。 示例: 谢谢! 最佳答案 绘图不会自动调整标签,但您可以使用自定义数据标
这是一张我认为可以快速说明问题的图片。您只需从 git hub 下载示例,转到曲线散点图示例并点击一个点即可显示点注释,然后只需滚动图表即可将点移出图表。 所以通常我们希望注释 float 在所有内容
我正在使用 coreplot 绘制这样的散点图: 我使用了 4 个不同的图(按颜色显示),并通过在每个“条形”的开头/结尾添加 0 值点来创建“类似条形”的感觉。我想确定用户选择了哪个栏,然后更改其他
我正在尝试使用 NSAttributedString 为 coreplot 创建自定义标签。当我的字符串只有 1 行时一切正常。 当我想使用代码有 2 行字符串时出现问题: NSMutableAttr
我在 x 轴上使用日期标签,并希望使用自定义 View 突出显示特定日期。我计划使用 axis:labelWasSelected: ,将annotationFrame移动到标签位置并在轴范围更改时滚动
我是一名优秀的程序员,十分优秀!