2016-05-17 9 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

ボタンのレイヤーを操作する必要があります。

#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

私のために働いていません。これがあなたのために働いていると確信していますか? – SpaceDog

関連する問題