2016-05-17 13 views
2

Ich versuche, eine abgerundete Ecke UIButton Klasse erstellen, aber es funktioniert nicht. Das ist, was ich habe, so weit:Versuchen, eine abgerundete Ecke UIButton Klasse

Schnittstelle

#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 

Implementierung

#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; 
} 

irgendwelche Ideen?

+0

was meinst du als "funktioniert nicht"? Kannst du es ausarbeiten? – cekisakurek

+0

funktioniert nicht. Ich ändere Werte auf dem Schnittstellenerbauer und es gibt keine Änderung auf den Knöpfen. Ich führe das Projekt, keine Button-Ecke oder Schatten. – SpaceDog

+0

sind Sie importierte das Quarzkernrahmenwerk ' –

Antwort

2

Sie sollten versuchen, die Ebene der Schaltfläche, d.

#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 

und die Implementierung;

#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 

Edit: - müssen Sie assign Unterklasse Klasse entfernen, dann alle Eigenschaft manuell entfernen. und dann wieder zuweisen Klasse zu Schaltfläche und dann Programm ausführen.

prüfen diese,

enter image description here

Ausgang: -

enter image description here

+0

Ihr Beispiel arbeitet für mich für den Eckenradius nur, aber der Schatten erscheint nicht. – SpaceDog

+0

Ich habe die Antwort aktualisiert. Kannst du es nochmal versuchen? – cekisakurek

+0

Sill funktioniert nicht für mich. Bist du sicher, dass das für dich funktioniert? – SpaceDog