在UIView中创build内部阴影

我想在iPad上创build一个内置的阴影在我的UIView上:

有阴影的UIView

UIView可以改变大小,所以我不能使用一个简单的图像来创build这种阴影。

我已经用setShadow等进行了testing,但这只是一个创build的阴影。

任何想法如何创造这种影子?

将阴影创build为特定大小的透明图层,然后创build一个可伸缩图像,如下所示:

 UIImage *shadowImage = [UIImage imageNamed:@"shadow.png"]; shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)]; 

然后,您可以将其作为具有contentMode比例的UIImageView中的图像以适合它,并按照您的方式工作。

比方说你的看法被称为“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 

如果您愿意,也可以在界面构build器中执行大部分操作,只要您在代码中创build可伸缩图像即可。

你可能会觉得它很有用,我为此做了一个UIView类

https://github.com/Seitk/UIView-Shadow-Maker

这个问题在SO中已经部分回答了

 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; 

玩变数,直到他们适合你的影子风格。

UPDATE

相反,您可以在位于现有视图顶部的较小居中视图上绘制外部阴影。

 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];