【问题标题】:Passing arguments change stats in drawRect method在 drawRect 方法中传递参数更改统计信息
【发布时间】:2013-07-29 09:04:41
【问题描述】:

我在将参数传递给我的 drawRect 方法时遇到了问题。 它改变了我在方法中给定的参数。

当我直接在drawRect中设置矩形框时它工作正常,所以一定有问题 传递参数。

例如它改变 所以我的代码是这样的。

ServiceAppViewController.m

-(void) initTransformBoxes{
TransformBox *transform = [[TransformBox alloc] initWithFrame:CGRectMake(20, _transformArrowView.frame.origin.y+65,                                                                      _transformArrowView.frame.size.width,120)];

[transform setBackgroundColor:[UIColor grayColor]];

[transform drawRect:CGRectMake(0, 0, 20, 20)];
[self.view addSubview:transform];


}

}

TransformBox.m

-(void) drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, 2.0);

CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

//but when I do it hard wired it works?
CGRect rectangle = CGRectMake(0, 0, 20, 20);
CGContextAddRect(context,rectangle);
//instead of this
//    CGContextAddRect(context,rect);

CGContextStrokePath(context);
}

另一个问题是,我是否可以制作一个静态的 drawRect 方法? 我试图覆盖 .h 文件中的 drawRect 但它从未被调用过?

提前致谢!

【问题讨论】:

    标签: iphone ios objective-c macos ipad


    【解决方案1】:

    你不应该打电话给[transform drawRect:CGRectMake(0, 0, 20, 20)];

    当视图可见时会自动调用drawRect:方法,rect参数实际上是视图的框架。

    如果要将参数传递给要绘制的视图,请将其作为属性传递给TransformBox 视图。

    当你需要改变它时(在你将它添加到父视图之后)你使用

    [transform setSmallRect:CGRectMake(0, 0, 20, 20)];
    [transform setNeedsDisplay];
    

    drawRect 会自动被调用。在您的 drawRect 方法中使用该属性。

    ServiceAppViewController.m

    -(void) initTransformBoxes
    {
        TransformBox *transform = [[TransformBox alloc] initWithFrame:CGRectMake(20, _transformArrowView.frame.origin.y + 65,                                                                      _transformArrowView.frame.size.width, 120)];
    
        [transform setBackgroundColor:[UIColor grayColor]];
    
        [transform setSmallRect:CGRectMake(0, 0, 20, 20)];
        [self.view addSubview:transform];
    }
    

    drawRect: 将在视图添加后被调用。

    TransformBox.m

    -(void) drawRect:(CGRect)rect{
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        CGContextSetLineWidth(context, 2.0);
    
        CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    
        CGRect rectangle = [self smallRect];
        CGContextAddRect(context,rectangle);
    
        CGContextStrokePath(context);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      相关资源
      最近更新 更多