Това може да помогне на някого, въпреки че е съставено от други теми на SO. За да създам изображение със скосена плочка с произволен цвят за нормален и за ретина дисплей, направих скосено изображение във Photoshop и зададох наситеността на нула, създавайки изображение в сива скала, наречено tileBevel.png
![tileBevel.png](https://i.stack.imgur.com/vKml1.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:. Основните графични функции се нуждаят от контекста като параметър, който се получава чрез извикване за получаване на текущия контекст.
И резултатът изглежда така:
![въведете описание на изображението тук](https://i.stack.imgur.com/GxWbd.png)
person
Jim
schedule
11.11.2011