iPhone / iPad 之间具有不同效果的 CALayer

CALayer with different effects between iPhone / iPad

这让我有点困惑。我有一个通用应用程序,它有两个不同的故事板 iPhone 和 iPad。我正在使用一小段 CALayer 代码来圆化视图的边缘并在其上投射阴影。在 iPhone.

上完美运行
[self configShadowLayer:_view
           cornerRadius:_view.frame.size.width / 2.0
          shadowOffsetX:0.0
          shadowOffsetY:3.0
           shadowRadius:2.0
                opacity:0.2];


-(void)configShadowLayer:(UIView *)shadowView
        cornerRadius:(float)cornerRadius
       shadowOffsetX:(float)shadowOffsetX
       shadowOffsetY:(float)shadowOffsetY
        shadowRadius:(float)shadowRadius
             opacity:(float)opacity {

    CALayer *shadowLayer = shadowView.layer;
    shadowLayer.masksToBounds = NO;
    shadowLayer.cornerRadius = cornerRadius;
    shadowLayer.shadowOffset = CGSizeMake(shadowOffsetX, shadowOffsetY);
    shadowLayer.shadowRadius = shadowRadius;
    shadowLayer.shadowOpacity = opacity;
}

在iPad上,它给了我一个菱形。我必须将角半径从一半更改为四分之一,然后它才起作用。但是当然 iPhone 视图从圆形变为圆角矩形。

我错过了什么?

您应该在视图布局完成后调用 configShadowLayer:cornerRadius:shadowOffsetX:shadowOffsetY:shadowRadius:opacity:。当你只在布局过程之前调用它时,视图的框架可能有错误的尺寸,你会得到一个太大的圆角半径。

顺便说一句:您应该根据视图的边界计算半径,因为边界表示视图内部的坐标系。