2013-12-06 6 views
2

Я искал способ нарисовать изображение программно какое-то время. Я нашел довольно хорошее решение:Создайте несколько UIImage с простым цветом

UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0); 
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Но недостатком этого является то, что в том же контексте, я не могу создать два или более изображений различных цветов, так что я могу использовать их в качестве фона для кнопки, например (для все три состояния). Да, я знаю, что я могу установить некоторый ресурс PNG в качестве фона UIButton, но если бы я хотел, чтобы я не задавал этот вопрос.

Мне бы очень хотелось узнать, как создавать образы программно и использовать их, с разными цветами в качестве фона, в том же контексте или, возможно, созданный в другом контексте, но перенесенный туда, где они мне нужны.

EDIT: Для уточнения, кроме того, принять этот кусок кода:

UIButton *button = [UIButton alloc] init]; 

button.frame = CGRectMake(0.0, 0.0, 200, 30); 

//this is pefect 
button.backgroundColor = [UIColor whiteColor]; 

//but, what if I want to have the UIControlStateNormal/UIControlStateHighlighted/UIControlStateDisabled with different background colors ? 
[button setBackgroundColor: [UIColor blackColor] forState: ?] // dont't think so, right ? 

В вышеописанном случае я вынужден использовать изображение, если я хочу кнопку, чтобы выглядеть по-другому, когда нажата или отключена , конечно, фон, потому что заголовок и цвет заголовка можно легко изменить.

+1

вы знаете UIButton имеет свойство setBackgroundColor? Почему вы создали (по моему мнению) сплошные цветные изображения? Или они не сплошные цвета? –

+0

Почему вы не можете создавать несколько изображений из одного контекста? Получите контекст, заполните его первым цветом, получите изображение. Затем заполните контекст вторым цветом, получите новое изображение и так далее. – DrummerB

+0

@JohnRiselvato, см. Мои правки :) – Roland

ответ

3

Вы можете просто создать категорию на UIImage вернуть новый UIImage экземпляр определенного размера и заполнены цветом:

+ (UIImage *)imageOfSize:(CGSize)size filledWithColor:(UIColor *)color { 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect rect = (CGRect){CGPointZero, size}; 
    CGContextFillRect(context, rect); 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 
} 
+0

Это звучит неплохо, просто я бы использовал подкласс вместо категории, я не так много в категориях – Roland

+0

uhh ...? что бы вы сделали подклассом? UIImage? –

+0

Изучите основные различия между категорией и подклассом. Это определенно случай для категории. – DrummerB

0

Попробуйте как это один и тот же код: -

UIImage *thumbnail =[UIImage imageNamed:@"yourImg.png"]; 
    CGSize itemSize = CGSizeMake(35, 35); 
    UIGraphicsBeginImageContext(itemSize); 
    CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); 
    [thumbnail drawInRect:imageRect]; 
    cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
1

проверьте это:

+ (UIImage *)imageWithColor:(UIColor *)color { 
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetFillColorWithColor(context, [color CGColor]); 
    CGContextFillRect(context, rect); 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

факультативно вы можете d сырец пользовательские изображения из слоя

+ (UIImage *)imageFromLayer:(CALayer *)layer{ 
    UIGraphicsBeginImageContext([layer frame].size); 
    [layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return outputImage; 
} 
2

Я создал CocoaPod, который обеспечивает [UIImage imageWithColor:]:

pod 'UIImage+ImageWithColor'

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