我现在可以完美地工作了。我很欣慰不必去 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
在所有 4 个边缘上将 edgeAntialiasingMask 的 4 个最低有效位设置为 0 项的抗锯齿——没有这条线,我得到了一个接缝。
如果有人能解释屏蔽过程的机制,我将不胜感激——尽管我得到了正确的结果,但我是通过反复试验来做到的。
请注意,蒙版设置为(不透明)绿色,并且它是可见的蒙版区域 - 即第一次通过时,绿色矩形覆盖了图像的右半部分,正是这种爱被显示出来。
我猜测对于每个像素,它将图层像素 RGBA 乘以掩码像素上的 alpha 值