Это может кому-то помочь, хотя это было связано с другими темами на SO.Чтобы создать изображение со скошенной плиткой произвольного цвета для обычного изображения и для отображения сетчатки, я сделал скошенное изображение в фотошопе и установил насыщенность на ноль, сделав изображение в градациях серого с названием tileBevel.png
Я также создал один для дисплея сетчатки (tileBevel@2x.png
)
Вот код:
+ (UIImage*) createTileWithColor:(UIColor*)tileColor {
int pixelsHigh = 44;
int pixelsWide = 46;
UIImage *bottomImage;
if([UIScreen respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0) {
pixelsHigh *= 2;
pixelsWide *= 2;
bottomImage = [UIImage imageNamed:@"tileBevel@2x.png"];
}
else {
bottomImage = [UIImage imageNamed:@"tileBevel.png"];
}
CGImageRef theCGImage = NULL;
CGContextRef tileBitmapContext = NULL;
CGRect rectangle = CGRectMake(0,0,pixelsWide,pixelsHigh);
UIGraphicsBeginImageContext(rectangle.size);
[bottomImage drawInRect:rectangle];
tileBitmapContext = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(tileBitmapContext, kCGBlendModeOverlay);
CGContextSetFillColorWithColor(tileBitmapContext, tileColor.CGColor);
CGContextFillRect(tileBitmapContext, rectangle);
theCGImage=CGBitmapContextCreateImage(tileBitmapContext);
UIGraphicsEndImageContext();
return [UIImage imageWithCGImage:theCGImage];
}
Это проверяет, используется ли дисплей сетчатки, определяет размерыпрямоугольник для рисования, выбирает соответствующее базовое изображение в градациях серого, устанавливает режим наложения на оверлей, а затем рисует прямоугольник в верхней части нижнего изображения.Все это делается внутри графического контекста, заключенного в скобки вызовами BeginImageContext и EndImageContext.Они устанавливают текущий контекст, необходимый для UIImage drawRect: метод.Для функций Core Graphics нужен контекст в качестве параметра, который получается вызовом для получения текущего контекста.
И результат выглядит так: