如何为CoreGraphics绘制的UIButton创建选定状态颜色?

时间:2013-12-23 21:50:40

标签: ios objective-c xcode uibutton core-graphics

我通过CoreGraphics创建了一个钻石形状,用作UIButton。我在设置按下状态时遇到问题,在选择整个帧时设置背景颜色,并且由于绘制了菱形按钮,因此没有图像可用于其选定状态。我怎样才能得到它,以便按下菱形按钮时,只有UIButton视图中的钻石会改变颜色?

1 个答案:

答案 0 :(得分:0)

如果您有钻石图像,为什么不制作选定的状态图像并使用[UIButton setImage:forState:]?

如果您自己完成所有绘图,则需要将绘图剪切到菱形。 ctx是您要绘制的CGContext。

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef maskCtx = CGBitmapContextCreate(NULL, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);

UIBezierPath* path = CreateADiamondBezierPath();

CGContextSetRGBFillColor(maskCtx, 0, 0, 0, 1);
CGContextBeginPath(maskCtx);
CGContextAddPath(maskCtx, path.CGPath);
CGContextFillPath(maskCtx);

CGImageRef maskImg = CGBitmapContextCreateImage(maskCtx);

//Clip to the mask
CGContextClipToMask(ctx, scaledFrame, maskImg);

//Now fil in your ctx with the selected color
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1); //this does red

CFRelease(maskImg);
CFRelease(maskCtx);