Четные и нечетные буферы в UIView drawRect? - PullRequest
0 голосов
/ 23 января 2011

Привет еще раз (я благодарю всех за вашу предыдущую неоценимую помощь).

Новая проблема: я работаю над симуляцией физики, но столкнулся с проблемой с игрушкой.Все, что он делает, это рисует случайный прямоугольник на экране iPhone / Touch каждый раз, когда NSStimer timer вызывает метод tick.Я проиндексировал эти звонки по int frameCount.То, что каждый видит, - это два набора изображений, постепенно накапливающихся: один для четных кадров, другой для нечетных.Я подтвердил это, нарисовав frameCount на экране с четными и нечетными значениями в немного разных позициях.Таким образом, мы видим, что счетчики мигают взад-вперед синхронно с изображением в кадре.Сокращенный код ниже.Я ценю любые ваши предложения.Мне кажется, что должно быть два внеэкранных буфера.Но я здесь в неведении :-) И даже если это правда, я не знаю, как объединить их или скопировать одно в другое.

#define MAXFRAMES 1000

// Соответствующие части реализацииFooBar, подкласс UIView:

 - (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // Initialization code
        // Start a timer that will call the tick method of this class
        // 30 times per second  -- slowed way down for diagnostics

        timer = [NSTimer scheduledTimerWithTimeInterval:(3.0/1.0)
                    target:self selector:@selector(tick) userInfo:nil repeats:YES];

        frameCount = 0;
        self.clearsContextBeforeDrawing = NO;
        NSLog(@"frame initialized");
    }
    return self;
}

- (void)tick
{    
    // Tell the view that it needs to re-draw itself
    if (frameCount < MAXFRAMES) {
        [self setNeedsDisplay];
        frameCount++;
    }   
}


- (void)drawRect:(CGRect)rect
{

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // Draw a random rectangle with CGContextFillRect 
    // after calling CGContextSetRGBFillColor
    // Both called with suitable random parameters  

    // Draw the frameCount for diagnostic purposes

}

1 Ответ

0 голосов
/ 23 января 2011

Число буферов, которые UIView может использовать на своем слое рисования, не указано. Если вы хотите скопировать рисунки, вы должны рисовать из и в свой собственный контекст (ы) рисования CG, а затем использовать или рисовать свой результат в изображение, которое вы можете использовать в качестве содержимого CALayer вида.

...