Я отвечаю за отсечение при выполнении пользовательского рендеринга с использованием drawRect: - PullRequest
3 голосов
/ 24 февраля 2009

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

Пример:

-(void)drawRect:(CGRect)rect
{
    //assume this is called through someMethod below
    CGContextRef ctx = UIGraphicsGetCurrentContext();      
    [[UIColor redColor] setFill];
    CGContextFillRect(ctx, rect);
    [[UIColor blueColor] setFill];
    // is this following line a no-op? or should I check to make sure the rect
    // I am making is contained within the rect that is passed in?
    CGContextFillRect(ctx, CGRectMake(100.0f, 100.0f, 25.0f, 25.0f));      
}

-(void)someMethod
{
    [self setNeedsDisplayInRect:CGRectMake(50.0f, 50.0f, 25.0f, 25.0f)];
}

Ответы [ 2 ]

3 голосов
/ 27 февраля 2009

Чтобы упростить то, что сказал Барри: Да, фреймворк с этим справится.

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

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

2 голосов
/ 25 февраля 2009

Рамка обрезает ваш рисунок. В OS X (AppKit) рисунок обрезается до грязных областей NSView (по состоянию на 10.3). Я не уверен, что точный алгоритм отсечения в UIKit. Конечно, вы можете ускорить рисование, проверяя, что нужно рисовать, и рисуя только в грязных областях вида, а не полагаясь на каркас, чтобы обрезать ненужный рисунок.

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