我正在使用带路径的CAShapeLayer。现在我希望它能够产生大约10个单位厚度的光滑阴影。
首先:是的,我只能创建11个CAShapeLayer对象,并且每次使用不同的颜色将路径的轮廓增加1个单位,并在每次迭代时增加一些alpha。但是这样我的内存占用量就会增加,因为这个东西是半屏尺寸的,这意味着在内存中有11倍的半屏尺寸位图。
因此,自iPhone OS 3.2起,我可以在CALayer上使用那些漂亮的阴影属性。但我想坚持OS 3.0。那么我有什么选择,除了上面讨厌的那个?
答案 0 :(得分:0)
您可以使用Core Graphics创建阴影。 QuartzDemo示例中描述了您需要的构建块。请特别注意 QuartzClipping.m 中的class 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);