Это может кому-то помочь, хотя это было собрано из других тем на SO. Чтобы создать скошенное изображение плитки с произвольным цветом для обычного и для отображения сетчатки, я сделал скошенное изображение в фотошопе и установил насыщенность равной нулю, создав изображение в оттенках серого под названием tileBevel.png
Еще я создал один для дисплея сетчатки ([email protected]
)
Вот код:
+ (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:@"[email protected]"];
}
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 нуждаются в контексте в качестве параметра, который получается при вызове для получения текущего контекста.
И результат выглядит так:
person
Jim
schedule
11.11.2011