在UIView中创build内部阴影
我想在iPad上创build一个内置的阴影在我的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类
这个问题在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];