Как динамически создать изображение для UITableViewCell
Я хочу динамически создать изображение для UITableViewCell, который в основном представляет собой квадрат с числом в нем. Квадрат должен быть цветом (задан динамически) и содержать число в виде текста внутри него.
Я посмотрел на документацию CGContextRef, но не могу понять, как заставить изображение заполняться указанным определенным цветом.
Это то, что я пытался до сих пор.
-(UIImage*)createCellImageWithCount:(NSInteger)cellCount AndColour:(UIColor*)cellColour {
CGFloat height = IMAGE_HEIGHT;
CGFloat width = IMAGE_WIDTH;
UIImage* inputImage;
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
// drawing code goes here
// But I have no idea what.
UIGraphicsPopContext();
UIImage* outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outImage;
}
1 ответ
Решение
Перво-наперво: вам не нужно выдвигать графический контекст. Избавиться от UIGraphicsPushContext
а также UIGraphicsPopContext
линий.
Во-вторых, как нарисовать то, что вы хотите:
-(UIImage*)createCellImageWithCount:(NSInteger)cellCount AndColour:(UIColor*)cellColour {
CGFloat height = IMAGE_HEIGHT;
CGFloat width = IMAGE_WIDTH;
UIImage* inputImage;
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef context = UIGraphicsGetCurrentContext();
[cellColour set]; // Set foreground and background color to your chosen color
CGContextFillRect(context,CGRectMake(0,0,width,height)); // Fill in the background
NSString* number = [NSString stringWithFormat:@"%i",cellCount]; // Turn the number into a string
UIFont* font = [UIFont systemFontOfSize:12]; // Get a font to draw with. Change 12 to whatever font size you want to use.
CGSize size = [number sizeWithFont:font]; // Determine the size of the string you are about to draw
CGFloat x = (width - size.width)/2; // Center the string
CGFloat y = (height - size.height)/2;
[[UIColor blackColor] set]; // Set the color of the string drawing function
[number drawAtPoint:CGPointMake(x,y) withFont:font]; // Draw the string
UIImage* outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outImage;
}