2015-06-01 3 views
1

Я создал этот метод, который генерирует и изображение из оригинала, но добавляет дополнение к новому изображению в соответствии с заданным размером. Все работает отлично, за исключением того, что цвет фона изображения всегда черный, но я устанавливаю белый цвет заливки. Любая идея, как это исправить?Swift - базовая графика и настройка цвета фона?

public extension UIImage { 

    public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, 0.0) 
     let context = UIGraphicsGetCurrentContext() 
     UIGraphicsPushContext(context); 

     let origin = CGPointMake(
      (size.width - self.size.width)/2.0, 
      (size.height - self.size.height)/2.0 
     ) 

     backgroundColor.setFill() 
     drawAtPoint(origin) 

     UIGraphicsPopContext() 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return newImage 
    } 

} 

EDIT:

Вот рабочая версия

public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage { 
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, UIScreen.mainScreen().scale) 
    let context = UIGraphicsGetCurrentContext() 

    let origin = CGPointMake(
     (size.width - self.size.width)/2.0, 
     (size.height - self.size.height)/2.0 
    ) 

    backgroundColor.setFill() 
    CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height)) 
    drawAtPoint(origin) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

ответ

2

Линия backgroundColor.setFill() просто устанавливает цвет заливки текущего контекста, на самом деле это не заполняет. Один из способов выполнения заполнения - позвонить CGContextFillRect(context, CGRect(x: 0, y: 0, width: size.width, height: size.height)) после установки цвета заливки.

Кроме того, вероятно, вы должны пройти scale в UIImage в качестве параметра scale в UIGraphicsBeginImageContextWithOptions, а не 0.0. Кроме того, вам не нужны строки push-и pop-context вообще - вы уже работаете в текущем контексте.

+0

Удивительно, это исправило проблему, обновит мой вопрос с исправлением – aryaxt

0

смотрит на меня, как вы настраиваете свой цвет фона "Clear" (как ни в цвете), что означает он покажет, какой цвет установлен в фоновом режиме ... который почти наверняка черный.

Вам необходимо установить значение по умолчанию «UIColor.whiteColor()».

+0

Фоновый вид не черный, он белый. UIColor.whiteColor(). SetFill() не исправляет это, так что проблема кажется где-то еще – aryaxt

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