我现在已经完美地工作了。不用去 GL,我很欣慰。
我基本上画了第一个(红色——在 12 点钟方向)宝石,带有一个只允许右半部分可见的蒙版。
然后我画剩下的 11 个。
然后我再次绘制第一个,这次将蒙版设置为仅显示左半部分。
for( int i = 0; i <= 12; i++ )
{
for ( int dullGlow = 0; dullGlow <= 1; dullGlow++ )
{
BOOL isDull = ( dullGlow == 0 ) ? YES : NO;
CALayer* L = [CALayer layer];
CGImageRef dullImage = [ButtonImages dullImage: i % 12];
CGImageRef glowImage = [ButtonImages glowImage: i % 12];
L.contents = (id) ( isDull ? dullImage : glowImage );
L.bounds = CGRectMake( 0, 0, buttonSize, buttonSize );
L.opacity = ( isDull ? 1.0 : 0.0 );
if( i == 0 || i == 12 )
{
CGFloat halfSize = buttonSize / 2.0;
CGRect keepLeftHalf = CGRectMake( 0, 0,
halfSize, buttonSize );
CGRect keepRightHalf = CGRectMake( halfSize, 0,
halfSize, buttonSize );
CALayer* maskLayer = [CALayer layer];
maskLayer.frame = ( i == 0 ) ? keepRightHalf : keepLeftHalf;
maskLayer.backgroundColor = [UIColor greenColor].CGColor;
maskLayer.edgeAntialiasingMask = 0x0;
[L setMask: maskLayer];
}
[self.layer addSublayer: L];
layers[ dullGlow ] [ i ] = L;
} // dullGlow
} // i
将 edgeAntialiasingMask 的 4 个最低有效位设置为所有 4 个边缘上的 0 个抗锯齿项 - 没有这条线,我得到了一个接缝。
如果有人能解释屏蔽过程的机制,我将不胜感激 - 尽管我得到了正确的结果,但我是通过反复试验做到的。
请注意,蒙版设置为(不透明)绿色,并且蒙版区域是可见的——即第一遍绿色矩形覆盖了图像的右半部分,正是这种爱得到了显示出来。
我猜测对于每个像素,它是将图层像素 RGBA 乘以掩码像素上的 alpha 值