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:
。当你只在布局过程之前调用它时,视图的框架可能有错误的尺寸,你会得到一个太大的圆角半径。
顺便说一句:您应该根据视图的边界计算半径,因为边界表示视图内部的坐标系。
这让我有点困惑。我有一个通用应用程序,它有两个不同的故事板 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:
。当你只在布局过程之前调用它时,视图的框架可能有错误的尺寸,你会得到一个太大的圆角半径。
顺便说一句:您应该根据视图的边界计算半径,因为边界表示视图内部的坐标系。