代码之家  ›  专栏  ›  技术社区  ›  user1028028

Draw in rect未被调用

  •  0
  • user1028028  · 技术社区  · 12 年前

    所以我有一个图表绘制视图。它是在视图控制器中呈现为模态的。问题是drawInRect没有被调用。为什么?视图是在界面生成器中设置的,并已初始化。。。

    - (void)viewWillAppear:(BOOL)animated
    {
        minVal = [self.delegate minValue];
        maxVal = [self.delegate maxValue];
        noSteps = [self.delegate noSteps];
        stepVal = [self.delegate stepValue];
        data = [self.delegate dataArray];
        formulaName = [self.delegate formulaName];
        self.titleLabel.text = formulaName;
    
        // draw the chart
        self.chartView = [[PSChartIOS alloc] initWithFrame:self.chartView.bounds andChartType:PSChartTypeColumn];
        [self.chartView setDataSource:self];
        [self.chartView setChartTitle:@""];
        [self.chartView setPanOXAxis:YES];
        [self.chartView setTitleColor:[UIColor redColor]];
        [self.chartView setStartAtTheEnd:NO];
        //[chart setAutoresizingMask: UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];
    
        [self.chartView loadData];
        [self.chartView setNeedsDisplay];
        // NSLog(@"autoresize mask :%d",self.view.autoresizingMask);
    
    //    [self.view addSubview:self.chartView];
    //    [self.chartView addSubview:chart];
    
    
    
    
        [super viewWillAppear:animated];
    }
    

    所有的委托方法都被调用了,所以视图有它的数据。。。它从不画。。。 我有一种感觉,问题可能是self.chartView.bounds…但这应该只是返回在IB中设置的边界。。。

    发现问题:

     NSLog(@"the bounds %@",NSStringFromCGRect( self.chartView.bounds));
    

    退货

    the bounds {{0, 0}, {0, 0}}
    

    我以为它会从IB获得边界。。显然不是

    2 回复  |  直到 12 年前
        1
  •  1
  •   John    12 年前

    您已经注释掉了将PSChartIOS视图放入视图层次结构的行。

    //    [self.view addSubview:self.chartView];
    

    我敢打赌,一旦你做到了,一切都会好起来的。

    此外,你的框架没有意义。创建具有类似框架的视图

    CGRectMake(0,0,200,200).  
    

    这将进行测试,以确保您可以在视图控制器的视图中看到200x200的图表。

        2
  •  0
  •   Anoop Vaidya    12 年前

    我看不见 drawInRect 方法调用。

    如果你在期待 setNeedsDisplay 调用它。然后它就不能自动调用了。如果您已经创建了自己的方法,那么您需要显式地调用它。

    但是它会调用 drawRect .

    编辑:

    你错别字了 没有调用的方法 drawInRect: 它是 drawRect:

    - (void)drawRect:(CGRect)rect {
        // Drawing code
        // only draws what is specified by the rect parameter
    }