尝试创建圆角 UIButton class
Trying to create a rounded corner UIButton class
我正在尝试创建一个圆角 UIButton class 但它不起作用。这是我目前所拥有的:
界面
#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;
}
有什么想法吗?
您应该尝试操纵按钮的图层,即;
#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
编辑:- 您需要删除 assign subclass class ,然后手动删除所有 属性 。然后再次将 class 分配给按钮,然后 运行 程序。
检查这个,
输出:-
我正在尝试创建一个圆角 UIButton class 但它不起作用。这是我目前所拥有的:
界面
#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;
}
有什么想法吗?
您应该尝试操纵按钮的图层,即;
#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
编辑:- 您需要删除 assign subclass class ,然后手动删除所有 属性 。然后再次将 class 分配给按钮,然后 运行 程序。
检查这个,
输出:-