0

我正在尝试绘制一个用户在 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不是一个会保留的对象,所以它不能添加到可变数组中,并且它会在本地范围结束后消失。它怎么可能是一个数组积分代替?)

4

2 回答 2

3

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

请参阅iPhone:为什么不调用 drawRect?

于 2012-04-21T04:55:33.593 回答
1

首先,您应该在 aUIView而不是 a中实现这些方法UIViewController


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

我想也许我没有告诉视图刷新自己并调用 drawRect

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

于 2012-04-21T05:02:44.087 回答