UIVIew のデリゲート メソッドがあり、drawRect メソッドに UIBezierPath を追加して、正方形に影を表示します。
//// General Declarations
CGContextRef context = UIGraphicsGetCurrentContext();
//// Shadow Declarations
UIColor* shadow = [UIColor blackColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
//// Rectangle Drawing
rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(8, 8, 44, 44)];
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
次に、特定の基準に基づいて影の色を変更したいので、makeRed というメソッドを作成します。
- (void)makeRed {
NSLog(@"makeRed");
CGContextRef context = UIGraphicsGetCurrentContext();
// Shadow Declarations
UIColor* shadow = [UIColor redColor];
CGSize shadowOffset = CGSizeMake(0, -0);
CGFloat shadowBlurRadius = 15;
CGContextSaveGState(context);
CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
[[UIColor whiteColor] setFill];
[rectanglePath fill];
CGContextRestoreGState(context);
}
しかし、メソッドを呼び出すと、次のメッセージが表示されます。
: CGContextSaveGState: 無効なコンテキスト 0x0
正しいコンテキストを設定するか、影の色を別の方法で変更する方法はありますか?
デリゲートには他の属性があるため、影の最初の描画は完全に機能することに注意してください。つまり、影を作成する .layer メソッドを使用する派手なアニメーションは機能しません。
乾杯