2016-05-17 101 views
2

我想創建一個圓角的UIButton類,但它不工作。這是我到目前爲止有:試圖創建一個圓角UIButton類

接口

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 

@interface BotaoCantosArredondados : UIButton 

@property (nonatomic, assign) IBInspectable CGFloat radius; 
@property (nonatomic, assign) IBInspectable CGSize shadowOffset; 
@property (nonatomic, assign) IBInspectable CGFloat shadowRadius; 
@property (nonatomic, assign) IBInspectable CGFloat shadowOpacity; 
@property (nonatomic, strong) IBInspectable UIColor *shadowColor; 


@end 

實施

#import "BotaoCantosArredondados.h" 
@import QuartzCore; 


@interface BotaoCantosArredondados() { 
    CALayer *sombraLayer; 
} 
@end 


@implementation BotaoCantosArredondados 

- (void)drawRect:(CGRect)rect { 

    [super drawRect:rect]; 

    if (sombraLayer) { 
    [sombraLayer removeFromSuperlayer]; 
    } 

    sombraLayer = [CALayer layer]; 
    sombraLayer.backgroundColor = [[UIColor clearColor] CGColor]; 
    sombraLayer.shadowColor = [_shadowColor CGColor]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds 
                cornerRadius:_radius]; 
    path.lineWidth = _shadowRadius; 
    sombraLayer.shadowPath = path.CGPath; 

    sombraLayer.shadowOffset = _shadowOffset; 
    sombraLayer.shadowOpacity = _shadowOpacity; 
    sombraLayer.shadowRadius = _radius; 
    sombraLayer.masksToBounds = YES; 

    [self.layer addSublayer:sombraLayer]; 

} 

- (void)setShadowColor:(UIColor *)shadowColor { 
    _shadowColor = shadowColor; 
} 

- (void)setShadowOffset:(CGSize)shadowOffset { 
    _shadowOffset = shadowOffset; 
} 

- (void)setShadowRadius:(CGFloat)shadowRadius { 
    _shadowRadius = shadowRadius; 
} 

- (void)setShadowOpacity:(CGFloat)shadowOpacity { 
    _shadowOpacity = shadowOpacity; 
} 

- (void)setRadius:(CGFloat)radius { 
    _radius = radius; 
} 

什麼想法?

+0

你是什麼意思爲 「不工作」?你能詳細說明嗎? – cekisakurek

+0

無法正常工作。我更改了界面構建器上的值,並且按鈕上沒有任何更改。我運行該項目,沒有按鈕的角落或陰影。 – SpaceDog

+0

你是進口的石英核心框架' –

回答

2

您應該嘗試操縱Button的圖層,即:

#import <UIKit/UIKit.h> 

IB_DESIGNABLE 

@interface BotaoCantosArredondados : UIButton 

@property (nonatomic, assign) IBInspectable CGFloat radius; 
@property (nonatomic, assign) IBInspectable CGSize shadowOffset; 
@property (nonatomic, assign) IBInspectable CGFloat shadowRadius; 
@property (nonatomic, assign) IBInspectable CGFloat shadowOpacity; 
@property (nonatomic, strong) IBInspectable UIColor *shadowColor; 

@end 

和執行;

#import "BotaoCantosArredondados.h" 

@implementation TestButton 

- (instancetype)initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.clipsToBounds = NO; 

    } 
    return self; } 


- (void)setShadowColor:(UIColor *)shadowColor { 
    _shadowColor = shadowColor; 
    self.layer.shadowColor = shadowColor.CGColor; 
    [self.layer setNeedsDisplay]; 

} 

- (void)setShadowOffset:(CGSize)shadowOffset { 
    _shadowOffset = shadowOffset; 
    self.layer.shadowOffset = shadowOffset; 
    [self.layer setNeedsDisplay]; 

} 

- (void)setShadowRadius:(CGFloat)shadowRadius { 
    _shadowRadius = shadowRadius; 
    self.layer.shadowRadius = shadowRadius; 
    [self.layer setNeedsDisplay]; 

} 

- (void)setShadowOpacity:(CGFloat)shadowOpacity { 
    _shadowOpacity = shadowOpacity; 
    self.layer.shadowOpacity = shadowOpacity; 
    [self.layer setNeedsDisplay]; 

} 

- (void)setRadius:(CGFloat)radius { 
    _radius = radius; 
    self.layer.cornerRadius = radius; 
    [self.layer setNeedsDisplay]; } 

@end 

編輯: -您需要刪除分配子類,然後手動刪除所有財產。然後再將類分配給按鈕,然後運行程序。

檢查這一點,

enter image description here

輸出: -

enter image description here

+0

你的例子只適用於我的角落半徑,但陰影不出現。 – SpaceDog

+0

我更新了答案。你可以再試一次嗎? – cekisakurek

+0

sill不適合我。你確定這對你有用嗎? – SpaceDog