2

如何为一组 CALayers 添加阴影?我有一个“FoldingView”类,它维护几个“SliceView”类。每个 sliceview 的层都将被赋予一个 CATransform3D,其中我使用了透视属性 (.m34 = 1.0 / -1000)。

如何添加具有良好视觉逻辑的阴影?这是我到目前为止一直在想的:

  1. 我可以获得每个切片的路径并将它们组合起来以获得阴影路径。

    • 我不知道当图层使用 CATransform3D 时如何获取 CALayer 的路径
    • 它可能在视觉上起作用,但如果光应该来自左上角,我担心它不会完全正确。
  2. 我可以将标准 CALayer 阴影应用于所有图层

    • 由于阴影相互重叠,它看起来不太好

如果有人有任何其他建议或知道如何编写第 1 个想法,我将非常高兴!这是您从中看到屏幕截图的示例项目的链接。

下载带有代码的压缩应用程序

来自应用程序的示例图像

4

1 回答 1

1

这似乎按要求工作。这是按切片视图完成的。

- (UIBezierPath *)shadowPath
{ 

    if(self.progress == 0 && self.position != VGFoldSliceCenter)
    {
        UIBezierPath *path = [UIBezierPath bezierPath];  
        return path;
    }
    else
    { 
        CGPoint topLeft = pointForAnchorPointInRect(CGPointMake(0, 0), self.bounds);
        CGPoint topRight = pointForAnchorPointInRect(CGPointMake(1, 0), self.bounds);
        CGPoint bottomLeft = pointForAnchorPointInRect(CGPointMake(0, 1), self.bounds);
        CGPoint bottomRight = pointForAnchorPointInRect(CGPointMake(1, 1), self.bounds);

        CGPoint topLeftTranslated = [self.superview convertPoint:topLeft fromView:self];
        CGPoint topRightTranslated = [self.superview convertPoint:topRight fromView:self];
        CGPoint bottomLeftTranslated = [self.superview convertPoint:bottomLeft fromView:self];
        CGPoint bottomRightTranslated = [self.superview convertPoint:bottomRight fromView:self];

        UIBezierPath *path = [UIBezierPath bezierPath];

        [path moveToPoint:topLeftTranslated];
        [path addLineToPoint:topRightTranslated];
        [path addLineToPoint:bottomRightTranslated];
        [path addLineToPoint:bottomLeftTranslated];
        [path closePath]; 

        return path;
    } 
}
于 2012-08-15T09:01:06.717 回答