来自NSMutableArray的线图CGPoints

时间:2011-01-11 05:44:02

标签: iphone objective-c xcode nsmutablearray subclass

我一直在尝试调整加速度计示例中的代码,以便当用户按下一个uibutton时,一个点被添加到折线图中。

处理将两个浮点数转换为CGPoint,并将CGPoint转换为NSValue,然后将其添加到NSMutableArray,其中包含以下

-(IBAction)calculate:(id)sender {   
    self.points = [NSMutableArray array];
    CGPoint pt = CGPointMake(d, c);
    [self.points addObject:[NSValue valueWithCGPoint:pt]];
    NSLog(@"%@", NSStringFromCGPoint(pt));
    NSLog(@"%@", [NSString stringWithFormat:@"%d points", self.points.count ]);
}   

但由于某些原因我只得到一个对象存储在数组中,似乎每次按下计算按钮,对象pt被覆盖,在正面它有正确的x,y坐标。关于这个的任何想法?

更新

删除了self.points = [NSMutableArray array];并将其置于视图中加载,也将第一个点设置为0,0。这样工作正常。现在接下来的问题是我有一个Graph子类,其中正在进行CG绘图。我试图找出一种简单的方法来访问图形类中ViewController类中的上述NSMutableArray。

我已经接近尾声,但我真的陷入困境,任何帮助都会很棒。 仍在尝试在UIScrollview上的UIView上绘制线图。绘制rect方法在UIView子类中,一切都在那里工作,我在轴上有网格线和标签,我可以手动绘制到它上面。但我遇到的问题是我无法读取CGPoints的NSMutableArray,它们是x和y coords。 ViewController执行计算,结果写入NSMutable数组,这一切都正常,我可以看到CGpoints及其值是用ViewController中的NSLogs编写的。 我已经尝试了各种方法将NSMutableArray设置为全局,但无济于事,一切都在运行,但是当我可以看到在ViewController中写入的点时,它们对UIView子类是不可见的。 我还尝试使用addObserver和observeValueForKeyPath方法,并且在所有运行的子类中再次看不到数组。 任何想法,建议,提示或想法都会很棒

2 个答案:

答案 0 :(得分:0)

听起来你的所有trackcalc []值都是零。反过来,这表明[vallres.text floatValue]返回0。

[NSString floatValue]在无法返回数字时返回零。

  

floatValue

     

返回接收者的浮点值   文本作为浮动。

     

- (float)floatValue

     

返回值

     

接收器的浮点值   文本作为浮点数,跳过空格   在字符串的开头。   返回HUGE_VAL或-HUGE_VAL   溢流,下溢0.0。也   如果接收者没有,则返回0.0   以有效的文本表示开头   一个浮点数。

答案 1 :(得分:0)

一路上工作并学到了很多东西,只是出于对最终产品概要的兴趣

  • ViewController与ScrollView和 UIView图表
  • 用于处理绘图的UIView子类
  • NSMutable的Singleton类 数组,以便ViewController可以编写 它的值和UIView子类 可以读取值来绘制 曲线图。

这是来自UIview子类

的相关男女同校
- (void)drawRect:(CGRect)rect {

    float what = self->m_Val1;
    NSLog(@"what %f",what);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGColorRef black = [[UIColor blackColor] CGColor];

    // Draw the grid lines
    DrawGridlines(ctx, 0.0, 200);


    // Draw the text
    UIFont *systemFont = [UIFont systemFontOfSize:12.0];
    [[UIColor whiteColor] set];
    [@"20" drawInRect:CGRectMake(2.0, 1.0, 24.0, 16.0) withFont:systemFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];
    [@"15" drawInRect:CGRectMake(2.0, 50.0, 24.0, 16.0) withFont:systemFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];
    [@"10" drawInRect:CGRectMake(2.0, 100.0, 24.0, 16.0) withFont:systemFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];
    [@"5" drawInRect:CGRectMake(2.0, 150.0, 24.0, 16.0) withFont:systemFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];


    if (what < 1) return;

    CGContextSetStrokeColorWithColor(ctx, black);
    CGContextSetLineWidth(ctx, 4.0f);
    MySingleton     *resultsInstance = [MySingleton instance];
    NSLog(@"From Graph view Count: %d", [[resultsInstance getArray] count]);
    float counthis =([[resultsInstance getArray] count]);
    for (int i = 0; i < (counthis-1); i++)
    {
        CGPoint pt1 = [[[resultsInstance getArray] objectAtIndex:i]CGPointValue]; 
        CGPoint pt2 = [[[resultsInstance getArray] objectAtIndex:i+1]CGPointValue]; 
        CGContextMoveToPoint(ctx, pt1.x, pt1.y);
        CGContextAddLineToPoint(ctx, pt2.x, pt2.y);
        CGContextStrokePath(ctx);
        NSLog(@"cgpoint %@", NSStringFromCGPoint(pt1));
        NSLog(@"point x,y: %f,%f", pt1.x, pt1.y);

    }

}