CALayer在iPhone/iPad上自动调整:如何?

Mod*_*ens 21 iphone resize calayer autoresize ipad

我正在尝试创建一个UIView子类("GradientView"),它将用各种颜色的渐变填充自己.我通过添加CAGradientLayer作为UIView层的子层来实现它.

它看起来不错,但是当屏幕旋转时,它没有调整渐变层的大小.有没有运气的层上找到一个布尔属性来进行切换,我推翻在GradientView layoutSubviews.

-(void)layoutSubviews {
    self.gradientLayer.frame = self.bounds;
}
Run Code Online (Sandbox Code Playgroud)

这很有效,但在设备旋转动画期间,GradientView背后的东西仍然可见.什么是"自动调整大小",这样的动画是光滑的(像UIView的自动尺寸),其CAGradientLayer匹配其父层的边界的最简单的方法?

l8n*_*ite 29

您可以在自定义UIView上定义+ layerClass方法...

@implementation MyGradientView
+(Class) layerClass {
    return [CAGradientLayer class];
}
@end
Run Code Online (Sandbox Code Playgroud)

您可以在控制器的viewDidLoad()(或任何地方)中初始化图层,类似于......

-(void)viewDidLoad {
    [super viewDidLoad];
    [(CAGradientLayer*)[mMyGradientViewInstance layer] setColors:nil];
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不是很清楚.我已经尝试了很多个小时但没有工作 (7认同)
  • +1很好地工作.图层大小由父UIView管理并自动调整大小. (2认同)
  • 我认为这里缺少的信息是,通过继承此方法,您可以创建为视图创建主"图层"的图层.由于它是视图的主要层,因此框架将根据需要为您自动进行自动调整. (2认同)