drawRect не отвечает - PullRequest
       26

drawRect не отвечает

0 голосов
/ 20 февраля 2012

Я пытаюсь нарисовать пятиугольник с набором точек, сохраняемых в NSArrary, однако представление пусто без какой-либо ошибки ...

-(void)prepareVertex:(int)noOfVertex
{
  polygonPoint=[NSMutableArray arrayWithCapacity:noOfVertex];
  for(int i=0;i<noOfVertex;i++)
  {
    CGPoint point=CGPointMake(sin((2*M_PI)*i/noOfVertex),(cos(2*M_PI)*i/noOfVertex));
    [polygonPoint addObject:[NSValue valueWithCGPoint:point]]; 
    NSValue *tempVal=[polygonPoint objectAtIndex:i];
    CGPoint tempPoint=[tempVal CGPointValue];
    NSLog(@"%f,%f",tempPoint.x,tempPoint.y);
  }

}

- (void)drawRect:(CGRect)rect
{

  [self prepareVertex:5];    
  for (int i=0; i<5; i++) {
    NSValue *tempVal=[polygonPoint objectAtIndex:i];
    CGPoint tempPoint=[tempVal CGPointValue];
  }


  CGContextRef context=UIGraphicsGetCurrentContext();
  CGContextSetLineWidth(context, 5);
  CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
  CGContextMoveToPoint(context, [[polygonPoint objectAtIndex:0] CGPointValue].x, [[polygonPoint objectAtIndex:0] CGPointValue].x);
  for (int i=1; i<5; i++) {
    CGPoint point=[[polygonPoint objectAtIndex:i] CGPointValue];
    CGContextAddLineToPoint(context,point.x, point.y);
  }
  CGContextStrokePath(context);
}

Может кто-нибудь сказать мне, что происходит ??

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Что ж, первое, что стоит отметить, это то, что вы используете черный цвет для обводки многоугольника, поэтому, если фон вашего вида тоже черный, вы ничего не увидите.

Тогда, и я думаю, что этореальная проблема, sin (x) и cos (x) всегда находятся в диапазоне от -1 до 1, поэтому точки, которые вы генерируете в:

CGPoint point=CGPointMake(sin((2*M_PI)*i/noOfVertex),(cos(2*M_PI)*i/noOfVertex));

, расположены в прямоугольнике CGrectMake (-1, -1, 2, 2).И эта область вашего обзора очень вероятно скрыта строкой состояния.

Так что, если сгенерированные вами координаты соответствуют искомым, вы можете попытаться удалить строку состояния или изменить координатываш взгляд.Но я думаю, что на самом деле вы должны изменить предыдущую строку на что-то вроде этого:

CGFloat x = centerPoint.x + radius * sin(2*M_PI*i/noOfVertex);
CGFloat y = centerPoint.y + radius * cos(2*M_PI*i/noOfVertex);
CGPoint point = CGPointMake(x, y);
0 голосов
/ 20 февраля 2012

Рисует что-то в левом верхнем углу вида.Эта цифра слишком мала, чтобы ее было легко увидеть.Это потому, что значения в polygonPoint (кстати, вы должны хотя бы вызвать массив polygonPoints) находятся в диапазоне от -1,0 до 1,0.Вы должны перевести свои точки в центр вида и соответственно масштабировать размер.

Что-то вроде

- (void)drawRect:(CGRect)rect {
    [self prepareVertex:5];    

    CGContextRef context=UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 5);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

    CGFloat x = self.center.x + self.bounds.size.width * 0.5 * [[polygonPoint objectAtIndex:0] CGPointValue].x;
    CGFloat y = self.center.y + self.bounds.size.height * 0.5 * [[polygonPoint objectAtIndex:0] CGPointValue].y;
    NSLog(@"Point %f/%f", x, y);
    CGContextMoveToPoint(context, x, y);

    for (int i=1; i<5; i++) {
        CGPoint point=[[polygonPoint objectAtIndex:i] CGPointValue];
        x = self.center.x + self.bounds.size.width * 0.5 * point.x;
        y = self.center.y + self.bounds.size.height * 0.5 * point.y;
        NSLog(@"Point %f/%f", x, y);
        CGContextAddLineToPoint(context, x, y);
    };
    CGContextStrokePath(context);
}

делает свое дело.

...