我想在UIView
添加投影和描边阴影
这就是我的设计师给我的应用阴影,
对于投影,他告诉我使用RGB(176,199,226),不透明度为90%,距离为3,尺寸为5
对于描边阴影,他告诉申请大小为1和100%不透明度的RGB(209,217,226)。
这是photoshop应用效果屏幕,
具有所需阴影的视图(预期输出)
我尝试了以下操作来获取投影
viewCheck.layer.masksToBounds = NO;
viewCheck.layer.cornerRadius = 5.f;
viewCheck.layer.shadowOffset = CGSizeMake(.0f,2.5f);
viewCheck.layer.shadowRadius = 1.5f;
viewCheck.layer.shadowOpacity = .9f;
viewCheck.layer.shadowColor = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor;
viewCheck.layer.shadowPath = [UIBezierPath bezierPathWithRect:viewCheck.bounds].CGPath;
这就是它的结果,
我在理解如何将中风和阴影应用到photoshop屏幕截图中时遇到问题(我已在上面添加)。如何应用距离,点差,大小,位置?
有人能指出我应用这些阴影的指南吗?有很多阴影效果出现,我想学习如何在这里提出每个问题!
谢谢:)
答案 0 :(得分:34)
我相信您所寻找的大多数配置都可以通过使用shadowPath
属性来实现。
viewCheck.layer.shadowRadius = 1.5f;
viewCheck.layer.shadowColor = [UIColor colorWithRed:176.f/255.f green:199.f/255.f blue:226.f/255.f alpha:1.f].CGColor;
viewCheck.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
viewCheck.layer.shadowOpacity = 0.9f;
viewCheck.layer.masksToBounds = NO;
UIEdgeInsets shadowInsets = UIEdgeInsetsMake(0, 0, -1.5f, 0);
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(viewCheck.bounds, shadowInsets)];
viewCheck.layer.shadowPath = shadowPath.CGPath;
例如,通过这种方式设置shadowInsets
UIEdgeInsets shadowInsets = UIEdgeInsetsMake(0, 0, -1.5f, 0);
你会得到一个不错的理想阴影:
您现在可以通过控制阴影路径矩形插入来决定如何构建阴影矩形。
答案 1 :(得分:9)
以下是User Defined Runtime Attribute
的步骤。
答案 2 :(得分:6)
为UIView
提供边框。
添加#import "QuartzCore/QuartzCore.h"
fram work。
myView.layer.cornerRadius = 15.0; // set as you want.
myView.layer.borderColor = [UIColor lightGrayColor].CGColor; // set color as you want.
myView.layer.borderWidth = 1.0; // set as you want.
答案 3 :(得分:2)
对不起,我只有Swift解决方案,但是我使用UIView扩展来执行此任务:
// MARK: Layer Extensions
extension UIView {
func setCornerRadius(#radius: CGFloat) {
self.layer.cornerRadius = radius
self.layer.masksToBounds = true
}
func addShadow(#offset: CGSize, radius: CGFloat, color: UIColor, opacity: Float, cornerRadius: CGFloat? = nil) {
self.layer.shadowOffset = offset
self.layer.shadowRadius = radius
self.layer.shadowOpacity = opacity
self.layer.shadowColor = color.CGColor
if let r = cornerRadius {
self.layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: r).CGPath
}
}
func addBorder(#width: CGFloat, color: UIColor) {
self.layer.borderWidth = width
self.layer.borderColor = color.CGColor
self.layer.masksToBounds = true
}
func drawStroke(#width: CGFloat, color: UIColor) {
let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: self.w, height: self.w), cornerRadius: self.w/2)
let shapeLayer = CAShapeLayer ()
shapeLayer.path = path.CGPath
shapeLayer.fillColor = UIColor.clearColor().CGColor
shapeLayer.strokeColor = color.CGColor
shapeLayer.lineWidth = width
self.layer.addSublayer(shapeLayer)
}
}
我从未尝试过,但您可以将此代码粘贴到任何Swift文件中,并可能从Obj-C代码中调用它们。