我想在iPad上的UIView
上创建一个内部阴影:
此UIView
可能会改变大小,因此我无法使用简单的图像来创建这种阴影。
我已经使用setShadow
等进行了测试,但它只是创建了一个阴影。
知道如何制作这种影子吗?
答案 0 :(得分:9)
你可能觉得它很有用,我为它做了一个UIView类别
答案 1 :(得分:6)
将阴影创建为特定大小的透明图层,然后创建一个可伸缩的图像,如下所示:
UIImage *shadowImage = [UIImage imageNamed:@"shadow.png"];
shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)];
然后,您可以将其作为图像放在UIImageView中,并使用contentMode缩放以适应它,它将以您希望的方式工作。
让我们说你的观点被称为“myView”。您可以像这样添加阴影:
UIImageView *shadowImageView = [[UIImageView alloc] initWithImage:shadowImage];
shadowImageView.contentMode = UIViewContentModeScaleToFill;
shadowImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
shadowImageView.frame = myView.bounds;
[myView addSubview:shadowImageView];
[shadowImageView release]; // only needed if you aren't using ARC
如果您愿意,也可以在界面构建器中执行大部分操作,只要您在代码中创建可伸展图像本身。
答案 2 :(得分:1)
view.layer.masksToBounds = NO;
view.layer.cornerRadius = 8; // if you like rounded corners
view.layer.shadowRadius = 5;
view.layer.shadowOpacity = 0.5;
CGFloat indent = 10;
CGRect innerRect = CGRectMake(indent,indent,view.frame.size.width-2*indent,view.frame.size.height-2*indent);
view.layer.shadowPath = [UIBezierPath bezierPathWithRect:innerRect].CGPath;
使用变量,直到它们适合您的阴影风格。
<强>更新强>
相反,您可以在位于现有视图顶部的较小的居中视图上绘制外部阴影。
CGFloat indent = 10;
CGRect innerRect = CGRectMake(indent,indent,view.frame.size.width-2*indent,view.frame.size.height-2*indent);
UIView * shadowView = [[UIView alloc] initWithFrame:innerRect];
shadowView.backgroundColor = [UIColor clearColor];
shadowView.layer.masksToBounds = NO;
shadowView.layer.cornerRadius = 8; // if you like rounded corners
shadowView.layer.shadowRadius = 5;
shadowView.layer.shadowOpacity = 0.5;
shadowView.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowView.bounds].CGPath;
[view addSubview:shadowView];
[shadowView release];