在iOS上,为什么不在以下代码中进行绘图?

时间:2012-04-21 04:51:09

标签: iphone objective-c ios cocoa-touch ipad

我正在尝试绘制一个用户在iPad上移动手指的矩形:

ViewController接口:

@interface ViewController : UIViewController {
    NSMutableArray *paths;
}

实现:

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    for (UITouch *touch in touches) {
        CGPoint location = [touch locationInView:self.view];

        CGRect aRectangle = CGRectMake(location.x, location.y, 40, 40);
        UIBezierPath *path = [UIBezierPath bezierPathWithRect:aRectangle];

        path = [UIBezierPath bezierPathWithOvalInRect:aRectangle];

        [paths addObject:path];       
    }
}

- (void)drawRect:(CGRect)rect {
    for (UIBezierPath *path in paths) {
        [path fill];
    }
}

但屏幕上没有任何内容...我想也许我没有告诉视图刷新自己并拨打drawRect,但我尝试进入iPad的主屏幕并重新进入应用程序但仍然没有显示?

(我打算使用一个点数组,但是因为CGPoint不是一个会保留的对象,所以它不能被添加到可变数组中,并且它会在本地范围之后消失结束。它怎么可能是一个点数组呢?)

2 个答案:

答案 0 :(得分:3)

drawRect是来自UIView但不是UIViewController的方法。您需要创建自定义UIView子类并在其中覆盖drawRect,然后如果使用Interface Builder构建UI结构,则将自定义视图类绑定到XIB / NIB中的视图。 / p>

请参阅iPhone: why isn't drawRect getting called?

答案 1 :(得分:1)

首先,您应该在UIView而不是UIViewController中实施这些方法。


其次,永远不要自己调用drawRect!

  

我想也许我没有告诉视图刷新自己并打电话   的drawRect

如果您希望视图重绘下一个绘图周期/帧,请在其上调用-setNeedsDisplay。