2013-02-18 5 views
10

У меня есть UIView, где я хотел бы нарисовать круг, который проходит мимо фрейма UIView, Я установил masksToBounds в NO - ожидая, что я смогу пройти за пределами UIView 5 пикселей справа и внизу.Рисование за пределами UIView

Я ожидаю, что овал не будет обрезаться, но он обрезается и не выходит за пределы?

- (void)drawRect:(CGRect)rect 
{ 

    int width = self.bounds.size.width; 
    int height = self.bounds.size.height; 
    self.layer.masksToBounds = NO; 

    //// Rounded Rectangle Drawing 
    //// Oval Drawing 
    UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0, 0, width+5, height+5)]; 
    [[UIColor magentaColor] setFill]; 
    [ovalPath fill]; 
    [[UIColor blackColor] setStroke]; 
    ovalPath.lineWidth = 1; 
    [ovalPath stroke]; 

} 

enter image description here

ответ

18

От http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/DrawingModel.html

UIView и NSView автоматически настроить рисунок среды в зрения до его DrawRect: вызывается метод. (В среде AppKit настройка среды рисования называется фокусом блокировки). В этой части класса класс представления создает контекст графики для текущей среды рисования.

Этот графический контекст является объектом Кварц (CGContext), который содержит информацию система рисования требует, например, цвета, чтобы применить, режим рисования (обводки или заливки), ширину линии и информацию о стиле, информации шрифта, и варианты компоновки. (В AppKit объект класса NSGraphicsContext переносит объект CGContext.) Контекстный объект графики связан с окном, растровым изображением, файлом PDF или другим устройством вывода и поддерживает информацию о текущем состоянии чертежа среды для этого объекта. Вид рисует с использованием графического интерфейса , связанного с окном представления. Для контекста графика контекст устанавливает область отсечения по умолчанию, совпадающую с границами вида , и ставит начало отсчета по умолчанию в начале координат .

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

0

Я не уверен, что это будет исправить вашу проблему, но это что-то смотреть. Вы устанавливаете self.layer.masksToBounds = NO каждый раз, когда вводите drawRect. Вы должны попробовать установить его внутри метода init только один раз, A), потому что нет необходимости делать это несколько раз и B), потому что, возможно, есть проблема с настройкой его после того, как drawRect уже был вызван - кто знает.

+0

Я пробовал - не работал ... – OneGuyInDc

+0

self.layer.masksToBounds = NO не поможет – pixelrevision

Смежные вопросы