CoreGraphicsを使用してシャドウを作成できます。必要なビルディングブロックは、QuartzDemoサンプルで説明されています。特にQuartzClipping.mclass QuartzMaskingView
をご覧ください。
- シェイプレイヤーのコンテンツを画像にキャプチャします
- お好みに合わせてシャドウを設定
- 透明レイヤーを開始
- レイヤーコンテンツの画像にクリップします-その外側に描画します
- もう一度画像を描きます
これにより、マスクされた領域の外側に影がペイントされます。
CGSize size = CGSizeMake(300, 100);
UIGraphicsBeginImageContextWithOptions(size,NO, 0.0);
[shapeLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect flippedImageRect =
CGRectMake(0, 0, image.size.width, -image.size.height);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetShadowWithColor(ctx, CGSizeMake(4, 4), 2,
[[UIColor colorWithWhite:0 alpha:0.4] CGColor]);
CGContextBeginTransparencyLayer(ctx, NULL);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextClipToMask(ctx, flippedImageRect, [image CGImage]);
CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]);
CGContextDrawImage(ctx, flippedImageRect, [image CGImage]);
CGContextEndTransparencyLayer(ctx);
CGContextRestoreGState(ctx);