Рисование CGRect касанием - PullRequest
       19

Рисование CGRect касанием

2 голосов
/ 22 ноября 2010

Мне было интересно, как нарисовать 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 ]

1 голос
/ 22 ноября 2010

Что вы видите на самом деле происходит?

Несколько заметок:

  1. Вы не должны делать это с UIImageView - они специально предназначены для контейнеров для файлов изображений. Для этого вам просто нужно использовать подкласс обычного UIView.
  2. В ваших touchesBegan вы знаете, что touch1 и touch2 всегда будут установлены на одно и то же, верно? Вы, кажется, никогда не используете touch1.
  3. point - вводящее в заблуждение имя переменной для чего-то, что является прямоугольником.
  4. Ваш drawRect не является необоснованным. Что такое pointColor? Если вы рисуете черным по черному, это может быть частью проблемы.
0 голосов
/ 21 июня 2011

Я взял только ваш код, он работает на меня.Просто посмотрите на это.И спасибо за ваш код.В этом примере я рисую прямоугольник.

- (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];
 }
0 голосов
/ 22 ноября 2010

Листинг 3-1 Код, который создает эллипс путем применения преобразования к кругу

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

Множество примеров кода в примере Quartz2d

...