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

看起来不错,但是旋转屏幕时,它没有调整渐变层的大小。由于没有运气在图层上找到要切换的BOOL属性,我覆盖了GradientView中的layoutSubviews。

-(void)layoutSubviews {
    self.gradientLayer.frame = self.bounds;
}

这可以工作,但是在设备旋转动画期间仍可以看到GradientView后面的内容。什么是最简单的“自动调整大小” CAGradientLayer使其与其父图层的边界匹配以使动画平滑的方法(如UIView自动调整大小)?

最佳答案

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

@implementation MyGradientView
+(Class) layerClass {
    return [CAGradientLayer class];
}
@end

您可以在 Controller 的viewDidLoad()中(或任何位置)初始化该层,例如...
-(void)viewDidLoad {
    [super viewDidLoad];
    [(CAGradientLayer*)[mMyGradientViewInstance layer] setColors:nil];
}

10-08 18:52