iphone - 如何生成圆角和阴影的图像视图?

时间:2011-11-09 16:14:27

标签: iphone image rounded-corners shadow

enter image description here

完全像上面的东西?

我知道如何制作圆角:

imageView.layer.cornerRadius = 10;
imageView.layer.shouldRasterize = YES;
imageView.layer.masksToBounds = YES;

对于影子,我试过

imageView.layer.shadowOffset = CGSizeMake(1, 1);
imageView.layer.shadowRadius = 5;
imageView.layer.shadowOpacity = 0.4;
imageView.layer.shadowColor = [UIColor blackColor].CGColor;
imageView.layer.shouldRasterize = YES;

但圆角的imageView.layer.masksToBounds = YES;会杀死阴影。

另一个问题是如何生成与图像中显示的完全相同的阴影?我在photoshop中制作了这个图像,我使用120度作为光的方向。但如果我使用上面的代码,并关闭maskToBounds,我可以看到阴影并且它很难看。

或者我可以在photoshop中生成圆角+阴影图像框并将框架应用到我应用中的每个图像吗?我认为这会提供更好的性能。如果所有图像都在滚动上,那么即时拍摄和转动图像会产生糟糕的性能。

由于

3 个答案:

答案 0 :(得分:4)

试试这个:

 CALayer *sublayer = [CALayer layer];
 sublayer.backgroundColor = [UIColor blueColor].CGColor;
 sublayer.shadowOffset = CGSizeMake(0, 3);
 sublayer.shadowRadius = 5.0;
 sublayer.shadowColor = [UIColor blackColor].CGColor;
 sublayer.shadowOpacity = 0.8;
 sublayer.frame = CGRectMake(30, 30, 128, 192);
 sublayer.borderColor = [UIColor blackColor].CGColor;
 sublayer.borderWidth = 2.0;
 sublayer.cornerRadius = 10.0;
 [self.view.layer addSublayer:sublayer];

 CALayer *imageLayer = [CALayer layer];
 imageLayer.frame = sublayer.bounds;
 imageLayer.cornerRadius = 10.0;
 imageLayer.contents = (id) [UIImage imageNamed:@"BattleMapSplashScreen.jpg"].CGImage;
 imageLayer.masksToBounds = YES;
 [sublayer addSublayer:imageLayer];

并查看original source

答案 1 :(得分:0)

我会使用两个图像视图。具有阴影的背景png(可以为每个图像重复使用)和具有圆角的前景png图像。

答案 2 :(得分:-1)

您可能希望使用其他图层进行阴影处理,并保持您的masksToBounds和舍入代码。在此示例中,imageView是要隐藏和舍入的图像视图的名称:

CALayer *shadowLayer = [[[CALayer alloc] init] autorelease];
sublayer.frame = imageView.bounds;
sublayer.masksToBounds = NO;
sublayer.shadowOffset = CGSizeMake(1, 1);
sublayer.shadowRadius = 5;
sublayer.shadowOpacity = 0.4;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shouldRasterize = YES;

[imageView.layer insertSublayer:shadowLayer atIndex:0]; // Put it underneath the image

那应该给你影子。现在为了避免慢速重新计算,我建议从图像中创建一个UIImage。请看这个链接:Create UIImage from shadowed view while retaining alpha?

希望这有帮助!