- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在为我的应用程序制作一组图表,但 ScatterPlot 有一个非常具体的问题。我无法让图表的 y 轴或高度重新缩放以适合屏幕。我花了几个小时在网上搜索答案,最接近的答案是遵循 raywenderlich.com 教程。但我似乎仍然无法压缩 y 轴以使图形适合屏幕。
理想情况下,我希望图表根据输入数据动态调整大小,因为绘制的数据差异可能从数十到数百不等。
这是我用来设置图形的代码:
-(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 = @"Date";
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;
//This next line gets the number of records in the array for the date axes
CGFloat dateCount = [timesTest count];
NSMutableSet *xLabels = [NSMutableSet setWithCapacity:dateCount];
NSMutableSet *xLocations = [NSMutableSet setWithCapacity:dateCount];
//Now we build an array of dates to label the axes
NSInteger i = 0;
//for (NSString *date in [[CPDStockPriceStore sharedInstance] datesInMonth]) {
for (NSString *date in datesTest) {
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 = @"Time";
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 time
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 - CPTPlotDataSource methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
return [timesTest count];
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
//NSInteger valueCount = [[[CPDStockPriceStore sharedInstance] datesInMonth] count];
NSInteger valueCount = [timesTest count];
switch (fieldEnum) {
case CPTScatterPlotFieldX:
if (index < valueCount) {
return [NSNumber numberWithUnsignedInteger:index];
}
break;
case CPTScatterPlotFieldY:
if ([plot.identifier isEqual:pbTest] == YES) {
return [pbTest objectAtIndex:index];
} else if ([plot.identifier isEqual:rollAvgTest] == YES) {
return [rollAvgTest objectAtIndex:index];
} else if ([plot.identifier isEqual:timesTest] == YES) {
return [timesTest objectAtIndex:index];
}
break;
}
return [NSDecimalNumber zero];
}
这是我创建数组来测试图形的地方:
datesTest = [NSArray arrayWithObjects:@"4/27",
@"4/28",
@"4/29",
nil];
timesTest = [NSArray arrayWithObjects:
[NSDecimalNumber numberWithFloat:601.1],
[NSDecimalNumber numberWithFloat:614.4],
[NSDecimalNumber numberWithFloat:607.3],
nil];
pbTest = [NSArray arrayWithObjects:
[NSDecimalNumber numberWithFloat:601.1],
[NSDecimalNumber numberWithFloat:601.1],
[NSDecimalNumber numberWithFloat:601.1],
nil];
rollAvgTest = [NSArray arrayWithObjects:
[NSDecimalNumber numberWithFloat:602.1],
[NSDecimalNumber numberWithFloat:613.4],
[NSDecimalNumber numberWithFloat:605.3],
nil];
raywenderlich 项目编译和运行完美,所需的 y 轴完美缩放以适合屏幕,但我的没有,但我无法弄清楚我错过了什么。任何关于我哪里出错的建议将不胜感激。编辑:添加绘图配置以响应评论...
-(void)configurePlots{
// 1 - Get graph and plot space
CPTGraph *graph = self.hostView.hostedGraph;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
// 2 - Create the three plots
// FIRST PLOT is Personal Best - pbPlot
// SECOND PLOT is Rolling Average - rollAvgPlot
// THIRD PLOT is Individual swims - swimssPlot
//Plot 1 - Peronal Best
CPTScatterPlot *pbPlot = [[CPTScatterPlot alloc] init];
pbPlot.dataSource = self;
NSString *pbID = [[NSString alloc] initWithFormat:@"pbID"];
pbPlot.identifier = pbID;
CPTColor *pbColor = [CPTColor redColor];
[graph addPlot:pbPlot toPlotSpace:plotSpace];
//Plot 2 - Rolling Average
CPTScatterPlot *rollAvgPlot = [[CPTScatterPlot alloc] init];
rollAvgPlot.dataSource = self;
NSString *rollAvgID = [[NSString alloc] initWithFormat:@"rollAvgID"];
rollAvgPlot.identifier = rollAvgID;
CPTColor *rollAvgColor = [CPTColor greenColor];
[graph addPlot:rollAvgPlot toPlotSpace:plotSpace];
//Plot 3 - Actual Swim Times
CPTScatterPlot *swimsPlot = [[CPTScatterPlot alloc] init];
swimsPlot.dataSource = self;
NSString *timesID = [[NSString alloc] initWithFormat:@"timesID"];
swimsPlot.identifier = timesID;
CPTColor *swimsColor = [CPTColor blueColor];
[graph addPlot:swimsPlot toPlotSpace:plotSpace];
// 3 - Set up plot space
//[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:pbPlot, rollAvgPlot, swimsPlot, nil]];
[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:swimsPlot, 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 *pbLineStyle = [pbPlot.dataLineStyle mutableCopy];
pbLineStyle.lineWidth = 2.5;
pbLineStyle.lineColor = pbColor;
pbPlot.dataLineStyle = pbLineStyle;
CPTMutableLineStyle *pbSymbolLineStyle = [CPTMutableLineStyle lineStyle];
pbSymbolLineStyle.lineColor = pbColor;
CPTPlotSymbol *pbSymbol = [CPTPlotSymbol ellipsePlotSymbol];
pbSymbol.fill = [CPTFill fillWithColor:pbColor];
pbSymbol.lineStyle = pbSymbolLineStyle;
pbSymbol.size = CGSizeMake(6.0f, 6.0f);
pbPlot.plotSymbol = pbSymbol;
CPTMutableLineStyle *rollAvgLineStyle = [rollAvgPlot.dataLineStyle mutableCopy];
rollAvgLineStyle.lineWidth = 1.0;
rollAvgLineStyle.lineColor = rollAvgColor;
rollAvgPlot.dataLineStyle = rollAvgLineStyle;
CPTMutableLineStyle *rollAvgSymbolLineStyle = [CPTMutableLineStyle lineStyle];
rollAvgSymbolLineStyle.lineColor = rollAvgColor;
CPTPlotSymbol *rollAvgSymbol = [CPTPlotSymbol starPlotSymbol];
rollAvgSymbol.fill = [CPTFill fillWithColor:rollAvgColor];
rollAvgSymbol.lineStyle = rollAvgSymbolLineStyle;
rollAvgSymbol.size = CGSizeMake(6.0f, 6.0f);
rollAvgPlot.plotSymbol = rollAvgSymbol;
CPTMutableLineStyle *swimsLineStyle = [swimsPlot.dataLineStyle mutableCopy];
swimsLineStyle.lineWidth = 2.0;
swimsLineStyle.lineColor = swimsColor;
swimsPlot.dataLineStyle = swimsLineStyle;
CPTMutableLineStyle *swimsSymbolLineStyle = [CPTMutableLineStyle lineStyle];
swimsSymbolLineStyle.lineColor = swimsColor;
CPTPlotSymbol *swimsSymbol = [CPTPlotSymbol diamondPlotSymbol];
swimsSymbol.fill = [CPTFill fillWithColor:swimsColor];
swimsSymbol.lineStyle = swimsSymbolLineStyle;
swimsSymbol.size = CGSizeMake(6.0f, 6.0f);
swimsPlot.plotSymbol = swimsSymbol;
}
最佳答案
检查您的地 block 标识符。在设置图时将标识符设置为一个值,并将它们与数据源中的其他值进行比较。该测试可能会失败,这意味着每个绘图的每个 y 值都是零 (0)。
关于iphone - Core Plot ScatterPlot y 轴未缩放以适合屏幕和绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109932/
如果我使用 NSUserDefaults 存储应用程序的设置,是否有任何方法可以使我的应用程序的设置“隐藏”,以免显示在 iPhone 上的常规设置应用程序中?我知道还有其他工具,例如 mySetti
我按照该网站的教程进行操作: http://theappleblog.com/2008/08/04/tutorial-build-a-simple-rss-reader-for-iphone/ 为了制
我通过 localisableString 和仅适用于 NSLocale 方法的不同 xib 更改 iPhone 的语言来完成本地化,但应用程序的要求是通过更改应用程序设置 View 中的语言来本地化
我试图弄清楚 iPhone 是否可以通过无线或蓝牙连接到另一台非 iPhone 设备,但发现了相互冲突的信息。我发现的大部分内容都是在 SDK 3.0 版本发布之前发现的,当时这肯定是不可能的。查看堆
This question already has answers here: Closed 7 years ago. Possible Duplicate: How to detect iPhone
当我在模拟器上运行我的应用程序时,每次都会生成白色的空白屏幕。但是当我在底部黑色 iPhone 按钮退出应用程序后,重新进入应用程序后 View 将可见。然后应用程序照常运行。 但是当我将它加载到我的
我的意思是两台 iPhone 设备应该通过蓝牙或 WiFi 连接,并且一台设备的 UI 应该扩展到另一台 iPhone 设备(不共享屏幕)。我们有办法在 iOS 中执行此操作吗? 最佳答案 Bump
如何通过宏检测设备型号?我使用过类似的东西,但模拟器上的结果总是 IS_IPHONE_5 #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInt
我目前有一个应用程序要求用户维护 VPN 隧道。加载时我检查 VPN 隧道是否可用。 我想知道是否有任何方法可以显示 UIAlertView,单击“确定”后,用户将进入 iPhone 主设置屏幕,以便
我正在开发一个 iPhone 客户端应用程序,它允许用户对各种服务进行评分。无需注册或登录。 要求是用户不能重复对服务进行评分(尽管可以更改其评分)。从目前的情况来看,该应用程序可以被删除、重新安装,
比如说,我点击一个 iphone 应用程序图标,启动时它将创建一个 .app 文件。那么是否可以从该应用程序调用另一个 iphone 应用程序。或者我们可以在该 .app 文件中执行一些操作,例如它将
真的有可能让iPhone静音模式独立于iPhone App吗? 这个应用程序"Talking Carl"让我很困惑。我的 iPhone 处于静音模式。每当我打开这个应用程序时。应用程序声音处于开启模式
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
如果我想编写一些自定义 iPhone 应用程序,但不一定通过 App Store 分发它们,是否可以在不加入 iPhone 开发者计划的情况下实现? 假设我只是想为自己编写一些小实用程序并将其放入我的
人们对 Unity 或 Torque Engine 等游戏引擎有何看法和/或体验?如果您是 iPhone 游戏开发新手,是否值得学习其中一种引擎?这些引擎生成的应用程序与使用 sdk 的 native
您能否在未安装 XCode 开发工具的计算机上分发 iPhone 应用程序以在 iPhone 模拟器中进行测试?可以直接在电脑上安装模拟器进行测试吗? 我有一组测试人员,他们不是开发人员,除了能够运行
我想在我的越狱设备上构建并安装我的应用程序,而无需支付 iPhone 开发者计划所需的 99 美元。我有 Rock 和 Cydia...最简单的方法是什么(如果可能的话)? 谢谢。 最佳答案 这是一个
我想测试一个网站,看看它如何与 iPhone 配合使用,但我没有 iPhone 或 iPod touch。有没有一种方法可以让我在不拥有网站的情况下测试网站的运行情况? 我真正想要的是修复 Stack
简单地说;我的 99 美元能给我带来什么我无法免费获得的东西? 好吧,好吧,听起来是个愚蠢的问题,但苹果网站对我来说并不清楚。 我的预感是,您可以在 99 岁时向应用程序商店提交应用程序,但您可以免费
我是一名注册的 iOS 开发人员。如何将我的 iPhone 应用程序转移到我的个人 iPhone? 最佳答案 用于测试?只需选择您的设备而不是模拟器即可。 关于iphone - 如何将我的 iPhon
我是一名优秀的程序员,十分优秀!