最新のSDKを使用してiOSアプリを開発しています。
背景レイヤーを動的に変更したい:
#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;
}
しかし、それは機能しません。
何かアドバイス?