Подтвердить что ты не робот

Вывод за пределы UIView

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

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

- (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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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