通过触摸绘制CGRect

时间:2010-11-22 19:05:53

标签: objective-c drawing touch

我想知道如何将CGRect绘制到UIImageView上。这是我得到的代码,但它似乎没有工作。有什么建议? touch1和touch2都是CGPoints,point是CGRect。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
touch1 = [touch locationInView:self];
touch2 = [touch locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

}    

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
touch2 = [touch locationInView:self];
point = CGRectMake(touch2.x, touch2.y, 50, 50);
[self setNeedsDisplay];
}

 - (void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetFillColorWithColor(context, pointColor.CGColor);
CGContextAddEllipseInRect(context, point);
CGContextDrawPath(context, kCGPathFillStroke);
}

3 个答案:

答案 0 :(得分:1)

您认为实际发生了什么?

一些注意事项:

  1. 您不应该使用UIImageView执行此操作 - 这些是专门用于图像文件的容器。你应该只使用常规UIView的子类。
  2. touchesBegan中,您知道touch1touch2将始终设置为相同的对象,对吗?你好像没有使用touch1。
  3. point是一个误导性的变量名称,用于表示矩形。
  4. 您的drawRect并非不合理。什么是pointColor?如果你正在绘制可能是问题的一部分的黑色黑色。

答案 1 :(得分:0)

Listing 3-1通过将变换应用于圆圈来创建椭圆的代码

CGContextScaleCTM(context, 1,2);
CGContextBeginPath(context);
CGContextAddArc(context, 0, 0, 25, 0, 2*M_PI, false);
CGContextStrokePath(context);

Quartz2d Example

中有更多示例代码

答案 2 :(得分:0)

我只接受了你的代码,它为我工作。看看吧。谢谢你的代码。在这个样本中,我正在绘制一个矩形。

- (void)drawRect:(CGRect)rect 
{
    CGContextRef context = UIGraphicsGetCurrentContext();  
    CGContextSetLineWidth(context, 2.0);  
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);  
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);  
    CGContextAddRect(context, rectFrame);  
    CGContextDrawPath(context, kCGPathFillStroke);  

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    startPoint = [touch locationInView:self];
    rectFrame.origin.x = startPoint.x;
    rectFrame.origin.y = startPoint.y;
}  
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    endPoint = [touch locationInView:self];
    rectFrame.size.width = endPoint.y - startPoint.x;
    rectFrame.size.height = endPoint.y - startPoint.x;

    [self setNeedsDisplay];
 }    

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch *touch = [touches anyObject];
    endPoint = [touch locationInView:self];
    rectFrame.size.width = endPoint.y - startPoint.x;
    rectFrame.size.height = endPoint.y - startPoint.x;

    [self setNeedsDisplay];
 }