完全像上面的东西?
我知道如何制作圆角:
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中生成圆角+阴影图像框并将框架应用到我应用中的每个图像吗?我认为这会提供更好的性能。如果所有图像都在滚动上,那么即时拍摄和转动图像会产生糟糕的性能。
由于
答案 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];
答案 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?。
希望这有帮助!