Я разрабатываю приложение для iOS с последним SDK.
Я хочу динамически изменить фоновый слой:
#import <QuartzCore/QuartzCore.h>
@interface MyClass : UIView
{
@private
CALayer* _gradientBackground;
}
И некоторые методы:
- (CALayer*)createLayerWithColor:(UIColor*)color
{
CALayer* layer = [CALayer layer];
layer.frame = CGRectMake(NSLayerX, NSLayerY,
NSLayerWidth, NSLayerHeight);
layer.backgroundColor = [color CGColor];
layer.cornerRadius = NSCornerRadius;
return layer;
}
- (CAGradientLayer*)createLayerWithGradient:(UIColor*)startColor
endColor:(UIColor*)endColor
{
CAGradientLayer* gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(NSLayerX, NSLayerY,
NSLayerWidth, NSLayerHeight);
gradientLayer.colors =
[NSArray arrayWithObjects:(id)[startColor CGColor],
(id)[endColor CGColor], nil];
gradientLayer.cornerRadius = NSCornerRadius;
return gradientLayer;
}
- (void)changeBackgroundWithLayer:(CALayer*)newLayer
{
if (_gradientBackground != nil)
[_gradientBackground removeFromSuperlayer];
_gradientBackground = newLayer;
[self.layer insertSublayer:newLayer atIndex:0];
}
И я делаю это, чтобы изменить фоновый слой:
[self changeBackgroundWithLayer:[self createLayerWithGradient:startColor endColor:endColor]];
И иногда с этим:
[self changeBackgroundWithLayer:[self createLayerWithColor:newColor]];
Я делаю так: первый сплошной слой, следующий градиентный слой и, наконец, сплошной слой.
Я также пробовал с этим кодом безрезультатно:
- (void)changeBackgroundWithLayer:(CALayer*)newLayer
{
if (_gradientBackground != nil)
[self.layer replaceSublayer:_gradientBackground with:newLayer];
else
[self.layer insertSublayer:newLayer atIndex:0];
_gradientBackground = newLayer;
}
Но это не работает.
Есть совет?