2015-12-08 5 views
1

Я пытаюсь нарисовать набор небольших кругов вокруг края изображения, чтобы отразить физические огни (пиксели). Я контролирую свое приложение. Эти круги часто меняют цвет. Поэтому я создал объект PixelSimulator для рисования каждого круга в пользовательский объект UIView.Нарисуйте UIBezierPath за пределами UIView :: drawRect()?

Вот соответствующий код

class PixelSimulator { 
    let size: CGSize; 
    let color: UIColor; 
    let pixelPath: UIBezierPath; 

    init (point: CGPoint, size: CGSize, pixel: Pixel) { 
    self.point = point; 
    self.size = size; 
    self.pixel = pixel; 

    pixelRect = CGRect(origin: point, size: size); 
    pixelPath = UIBezierPath(ovalInRect: pixelRect); 

    color = pixel.color; 
    } 

    func render() { 
    UIGraphicsBeginImageContext(size); 

    color.setFill(); 
    pixelPath.fill(); 

    UIGraphicsEndImageContext(); 
    } 
} 

Я попробовал другой подход, используя CGContextAddEllipseInRect(context, pixelRect) безрезультатно. Я также попытался объявить pixelPath внутри метода render(), также безрезультатно.

Что мне нужно изменить, чтобы получить мой bezierPath, нарисованный на экране в любое время, внутри drawRect() или из него?

+0

Каков ваш прогноз по содержанию? Когда вы вызываете рендер? – Wain

+0

Я вызываю 'render()', когда меняется цвет соответствующего физического света. – turibe

+0

Откуда? В draw rect? Настройка отображения, отображаемого при их изменении? Я бы не использовал контекст изображения, я бы рисовал прямо к виду или слою. – Wain

ответ

0

Я бы удалил контекст изображения и просто рисовал. Я бы назвал render только изнутри.

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

Когда уведомление получено вашим контроллером просмотра, он просто вызывает setNeedsDisplay на вид, который приведет к отображению симуляторов в следующем цикле розыгрыша.

+0

Этот подход работал и, вероятно, намного эффективнее, чем я имел в виду. Большое спасибо. – turibe