Вопрос

Я написал небольшое применение на заказ с использованием какао. А позже (да, я знаю, что это плохо), я просто спросил себя: будет ли это работать и на какао -прикосновение? Конечно, ID не сработал мгновенно, мне пришлось изменить имена классов и так далее. Ну, я обновлю вид, когда он был необходим, используя NSTimer и setNeedsDisplay: метод Работал довольно хорошо под какао, но абсолютно не под какао.

Я не могу объяснить это себе, и я на самом деле не знаю, какие строки кода могут помочь кому -то решить проблему. Может вот таймер:

[self setMyTimer: [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(myTarget:) userInfo:nil repeats:YES]];

И это цель:

- (void) myTarget:(NSTimer *)timer {
    [self setNeedsDisplay];
}

Таймер вызывается каждые 30 мс, я проверял это с помощью NSLOG.

в drawRect: Метод, который я действительно сделал, просто нарисовал несколько форм и ничего не сделал. На случай, если необходимо было бы вызвать какой -то clearRect: метод Как я уже сказал, при какао это сработало.

Это было полезно?

Решение

Я бы сначала проверил, есть ли drawRect: работает с помощью точки останова или оператора журнала.

Затем убедитесь, что ваше представление на самом деле находится на экране. Какова ценность [self superview]? Вы также должны сделать что -то вроде self.backgroundColor = [UIColor redColor]; чтобы вы могли видеть, где ваш взгляд.

Тот факт, что вы отмечаете глянец каждые 30 мс, не означает, что он будет рисовать каждые 30 мс. Как правило, это должно (это около 30 кадров в секунду), но нет гарантии. drawRect: не следует полагаться на то, как часто это называется. Из вашего вопроса я предполагаю, что вы имеете в виду, что он никогда не рисует, а не просто не рисует так часто, как ожидалось.

Другие советы

Вот дискуссия о setNeedsDisplay (Обратите внимание на отсутствие аргументов) из документации UIView:

Вы можете использовать этот метод, чтобы уведомить систему о том, что содержимое вашего представления должно быть перерисовано. Этот метод отмечает запрос и немедленно возвращает контроль в ваш код. Представление на самом деле не перерисовано до следующего цикла рисунка, после чего обновлены все признанные представления.

Вы должны использовать этот метод, чтобы запросить, чтобы представление было перерисовано только при изменении контента или внешнего вида. Если вы просто измените геометрию представления, представление обычно не перерисовано. Вместо этого его существующий контент корректируется на основе значения в представлении contentMode имущество. Редакция существующего контента повышает производительность, избегая необходимости перерисовать контент, который не изменился.

Напротив, вот дискуссия о setNeedsDisplay: (Обратите внимание на аргумент) из документации NSView:

Всякий раз, когда данные или состояние, используемые для привлечения изменений объекта представления, представление должно быть отправлено setNeedsDisplay: сообщение. NSView Объекты, помеченные как необходимый дисплей, автоматически перераспределяются на каждом проходе через цикл события приложения. (Просмотреть объекты, которые необходимо для REDISPLAY до того, как цикл событий появится, конечно, сразу же отправит соответствующий дисплей ... Метод.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top