iPhone: drawRect вызывается один раз - PullRequest
2 голосов
/ 07 января 2010

Я вызываю setNeedsDisplayInRect из функции NSTimer каждые две секунды. Это работает отлично, и рисует квадрат в случайной позиции, со случайным цветом. Однако в некоторых случаях я хотел бы нарисовать квадрат x количество раз в функции NSTimer (используя цикл for) - но после многочисленных ошибок тестирования кажется, что drawRect вызывается только один раз, хотя я запускаю setNeedsDisplayInRect x число раз? Я хотел бы помочь, так как я пытался разобраться в этой проблеме весь день. Карл.

Редактировать ниже мой код ...

View

- (void)drawRect:(CGRect)rect 
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
    CGContextSetFillColorWithColor(context, currentColor.CGColor);
    CGContextAddRect(context, redrawRect);
    CGContextDrawPath(context, kCGPathFillStroke);
}

-(void)drawInitializer 
{
    int x = (int)arc4random() % [self.xCoordinates count]; 
    int y = (int)arc4random() % [self.yCoordinates count]; 
    self.currentColor = [UIColor randomColor];
    self.redrawRect = CGRectMake ([[self.xCoordinates objectAtIndex:x] intValue],       [[self.yCoordinates objectAtIndex:y] intValue], 25, 25);
    [self setNeedsDisplayInRect:redrawRect];
}

Контроллер

- (void) handleTimer: (NSTimer *) timer
{
    for(int i=0; i<5; i++) 
    {
         [self.squareView drawInitializer];
    }
}

Ответы [ 2 ]

1 голос
/ 07 января 2010

Вы можете изменить код так, чтобы у вас был простой класс:

  • магазины цвета
  • позиция магазина
  • имеет метод для генерации случайных позиций, цветов, ...

Затем вы можете создать столько экземпляров, сколько захотите, и поместить их в NSMutableArray.
Таким образом, вы можете перебирать этот список и рисовать каждый объект в вашей процедуре рисования.
Всякий раз, когда вы добавляете / удаляете / изменяете один из ваших объектов, звоните setNeedsDisplay:

0 голосов
/ 08 января 2010

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

...