UIBezierPath永远不会被渲染

时间:2012-08-24 19:07:11

标签: objective-c uibezierpath

所以我对objective-c有一点经验,但不是很多。我正在尝试通过TouchEvents渲染UIBezierPath(换句话说,用手指画一条线)。另外,我想将所有bezierPaths保存到NSMutableArray(路径)中,以便我以后可以移动或修改它们。这是最简单的应用程序。我的标题如下所示:

@interface ViewController : UIViewController{
    UIBezierPath* path;
    NSMutableArray* paths;

    int curThickness;

}

@property (strong, nonatomic) IBOutlet UIView *scene;
@end

场景是占据整个屏幕的视图,也是我试图绘制路径的地方。

Relavent实现如下所示:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    NSLog(@"Starting Path");

    path = [UIBezierPath bezierPath];
    path.lineWidth = 15.0f;
    path.lineCapStyle = kCGLineCapRound;
    path.lineJoinStyle = kCGLineJoinRound;
    path.flatness = 2.0;
    path.miterLimit = 4.0;

    [path moveToPoint:[touch locationInView:scene]];

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    [path addLineToPoint:[touch locationInView:scene]];
    [scene setNeedsDisplay];
}


- (void)drawRect:(CGRect)rect {
    NSLog(@"I'm supposed to be drawing something...");
    [[UIColor redColor] set];
    [path stroke];
}



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    NSLog(@"No more touchy feelies");
    UITouch *touch = [touches anyObject];
    [path addLineToPoint:[touch locationInView:scene]];
    [paths addObject:path];
    [scene setNeedsDisplay];

    NSLog(@"number of paths: %i.", paths.count);

}

当我在模拟器上运行它时,所有事件都被注册,从不调用DrawRect,屏幕上没有任何内容(即使我在touchesEnded末尾添加了[path trace]),path is nonEmpty,并且无论我追踪多少条路径,paths.count都保持为零。

我错过了什么?一如既往,您的帮助总是非常受欢迎。

1 个答案:

答案 0 :(得分:1)

应该帮助你的事情:

  1. UIViewController未实现- (void)drawRect ..您需要在UIView子类中执行此代码!

  2. 如果您的paths集合始终为零,则导致此问题的常见错误是paths本身为零。 (Obj-c并不关心你是否尝试向nil对象发送消息,它只会返回一个默认值而不是崩溃。)仔细检查你是否实例化了一个NSMutableArray对象并指向{{1}对它来说。