iOS/核心动画:12张重叠的卡片围成一个圆圈
我试着在圆圈中排列12个物体,这样每一个都与它的逆时针邻接物重叠 大概是这样的: 问题是,如果我仅仅依赖于绘图顺序,其中一个始终会完全位于顶部,在这种情况下,红色的一个在12点 我试过使用iOS/核心动画:12张重叠的卡片围成一个圆圈,ios,core-animation,transform,calayer,depth-testing,Ios,Core Animation,Transform,Calayer,Depth Testing,我试着在圆圈中排列12个物体,这样每一个都与它的逆时针邻接物重叠 大概是这样的: 问题是,如果我仅仅依赖于绘图顺序,其中一个始终会完全位于顶部,在这种情况下,红色的一个在12点 我试过使用 { GlowButton* G = glowButton[ 0 ]; float theta = 0.3; G.layer.transform = CATransform3DMakeRotation( theta, 0, 1, 0 ); }
{
GlowButton* G = glowButton[ 0 ];
float theta = 0.3;
G.layer.transform = CATransform3DMakeRotation( theta, 0, 1, 0 );
}
试图绕垂直轴旋转,从而将一侧塞在相邻一侧的后面,但这不起作用
我被告知这是因为核心动画不支持深度测试
有没有办法在不闯入德国劳埃德船级社的情况下做到这一点?我可以想出两种方法来避免这个问题:
我不太确定你在用核心动画做什么,所以其中一种方法可能更适合,或者需要一些调整。我现在可以很好地完成这项工作。不用去德国劳埃德船级社,我感到很欣慰 我基本上画了第一块宝石(红色——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
for(inti=0;谢谢!我在这方面做了一个变体,它工作得很好。