Аргумент drawRect aRect относительно границ UIView - PullRequest
2 голосов
/ 03 мая 2011

Я работаю над созданием своего первого пользовательского UIView и изучаю семантику метода drawRect.

Я встречал совет (совет, который имеет смысл для меня) рисовать тольков рамках CGRect, который передается в качестве аргумента, вместо того, чтобы всегда рисовать все в пределах UIView * bounds:

- (void)drawRect:(CGRect)aRect {
    // draw, draw, draw...
}

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

Если какой-либо код за пределами моего UIView пройдет, например, очень большой CGRect в setNeedsDisplayInRect:(NSRect)invalidRect, базовый код просто слепо передаст тот же CGRect в мой drawRect метод, или он делает какое-то пересечение и всегда проходит в разумный прямоугольник?

Я не нашел ответа на это ни в одной документации.Это то, о чем мне даже не стоит беспокоиться?Или я должен всегда пересекать bounds и aRect самостоятельно?

1 Ответ

2 голосов
/ 03 мая 2011

Из руководства по программированию View :

Перед вызовом метода drawRect: вашего вида UIKit настраивает базовую среду рисования для вашего вида.В частности, он создает графический контекст и корректирует систему координат и область отсечения в соответствии с системой координат и видимыми границами вашего вида.

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

...