Как не очистить контекст перед рисованием - PullRequest
2 голосов
/ 29 ноября 2011

Мне нужно рисовать постепенно в подклассе UIView, но представление очищается каждый раз, когда я звоню [self setNeedsDisplay].

Я делаю это:

- (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder])) {
        self.clearsContextBeforeDrawing = FALSE;
    }
    return self;
}

Не хватаетчто-то?Как мне остановить UIView от очистки?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

К сожалению.

drawRect: не гарантируется использование сохраненного содержимого любого предыдущего чертежа обычного UIView. Кадровый буфер, скорее всего, находится за непрозрачным путем к графическому процессору, и его можно считать только записывающим. Поэтому вы всегда должны иметь возможность воссоздать весь вид, если вы реализуете drawRect для обычного UIView.

Но вы можете рисовать в другом контексте, включая предыдущее графическое содержимое, если вы создаете свой собственный растровый контекст рисования и рисуете в этот контекст вместо UIView. Затем вы можете преобразовать этот растровый контекст в изображение и отобразить это изображение как содержимое CALayer UIView.

3 голосов
/ 29 ноября 2011

Если вы вызываете setNeedsDisplay, он будет вызывать drawRect с полными границами.

Если вы рисуете постепенно (части вида), вам нужно вызвать:

[self setNeedsDisplayInRect:rect];

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

Дополнительная информация здесь: Постепенное рисование в UIView (iPhone)

Также,Вы устанавливаете это в ЛОЖЬ, и это обычно НЕТ в объективе-c.Один преобразуется в 0, а другой в (BOOL) 0 во время компиляции.Немного странно, но не вызывает проблем:

Есть ли разница между ДА / НЕТ, ИСТИНА / ЛОЖЬ и истиной / ложью в target-c?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...