如何添加投影到UIButton?

我想添加阴影到UIButton。 我试图使用self.layer.shadow *属性。 这些属性在UIView中工作,但它们在UIButton中的行为不同。 我真的很感激,如果我能得到任何指针来绘制阴影。 谢谢!

self.layer.cornerRadius = 8.0f; self.layer.masksToBounds = YES; self.layer.borderWidth = 1.0f; self.layer.shadowColor = [UIColor greenColor].CGColor; self.layer.shadowOpacity = 0.8; self.layer.shadowRadius = 12; self.layer.shadowOffset = CGSizeMake(12.0f, 12.0f); 

在导致阴影不被显示的问题中只有一个小错误: masksToBounds:YES也掩盖了阴影! 这是正确的代码:

 self.layer.cornerRadius = 8.0f; self.layer.masksToBounds = NO; self.layer.borderWidth = 1.0f; self.layer.shadowColor = [UIColor greenColor].CGColor; self.layer.shadowOpacity = 0.8; self.layer.shadowRadius = 12; self.layer.shadowOffset = CGSizeMake(12.0f, 12.0f); 

不幸的是,这意味着我们不能掩盖内容,同时没有任何诡计的影子。

记得#import <QuartzCore/QuartzCore.h>

这是一个简单的解决scheme,如果您使用的是一个UIButton

 #import <QuartzCore/QuartzCore.h> button.imageView.layer.cornerRadius = 7.0f; button.layer.shadowRadius = 3.0f; button.layer.shadowColor = [UIColor blackColor].CGColor; button.layer.shadowOffset = CGSizeMake(0.0f, 1.0f); button.layer.shadowOpacity = 0.5f; button.layer.masksToBounds = NO; 

刚刚得到它的工作,并认为这是值得张贴。 希望帮助!

这里有一个不仅创build阴影的子类,而且当你按下button时,button会动起来。

 // // ShadowButton.h #import <Foundation/Foundation.h> @interface ShadowButton : UIButton { } @end // // ShadowButton.m #import "ShadowButton.h" #import <QuartzCore/QuartzCore.h> @implementation ShadowButton -(void)setupView{ self.layer.shadowColor = [UIColor blackColor].CGColor; self.layer.shadowOpacity = 0.5; self.layer.shadowRadius = 1; self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); } -(id)initWithFrame:(CGRect)frame{ if((self = [super initWithFrame:frame])){ [self setupView]; } return self; } -(id)initWithCoder:(NSCoder *)aDecoder{ if((self = [super initWithCoder:aDecoder])){ [self setupView]; } return self; } -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ self.contentEdgeInsets = UIEdgeInsetsMake(1.0,1.0,-1.0,-1.0); self.layer.shadowOffset = CGSizeMake(1.0f, 1.0f); self.layer.shadowOpacity = 0.8; [super touchesBegan:touches withEvent:event]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ self.contentEdgeInsets = UIEdgeInsetsMake(0.0,0.0,0.0,0.0); self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); self.layer.shadowOpacity = 0.5; [super touchesEnded:touches withEvent:event]; } @end 

您可以inheritanceUIButton并覆盖drawRect:方法并手动添加阴影。 这是更多的工作,你应该现在关于石英2D的一些事情,但结果正是你想要的。 否则,你可能只是添加一个图像,但我优先考虑子类UIButton,因为它是非常灵活的button的大小,这是更一般的。

你可以创build一个子类并在Xcode中configuration它的值

下面是一个例子:

 import UIKit import QuartzCore @IBDesignable class CustomButton: UIButton { @IBInspectable var cornerRadius: CGFloat = 0 { didSet { layer.cornerRadius = cornerRadius } } @IBInspectable var borderWidth: CGFloat = 0 { didSet { layer.borderWidth = borderWidth } } @IBInspectable var borderColor: UIColor = UIColor.grayColor() { didSet { layer.borderColor = borderColor.CGColor } } @IBInspectable var shadowColor: UIColor = UIColor.grayColor() { didSet { layer.shadowColor = shadowColor.CGColor } } @IBInspectable var shadowOpacity: Float = 1.0 { didSet { layer.shadowOpacity = shadowOpacity } } @IBInspectable var shadowRadius: CGFloat = 1.0 { didSet { layer.shadowRadius = shadowRadius } } @IBInspectable var masksToBounds: Bool = true { didSet { layer.masksToBounds = masksToBounds } } @IBInspectable var shadowOffset: CGSize = CGSizeMake(12.0, 12.0) { didSet { layer.shadowOffset = shadowOffset } } }