• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 试图创建一个圆角 UIButton 类

[复制链接]
菜鸟教程小白 发表于 2022-12-12 20:04:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试创建一个圆角 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)drawRectCGRect)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)setShadowColorUIColor *)shadowColor {
  _shadowColor = shadowColor;
}

- (void)setShadowOffsetCGSize)shadowOffset {
  _shadowOffset = shadowOffset;
}

- (void)setShadowRadiusCGFloat)shadowRadius {
  _shadowRadius = shadowRadius;
}

- (void)setShadowOpacityCGFloat)shadowOpacity {
  _shadowOpacity = shadowOpacity;
}

- (void)setRadiusCGFloat)radius {
  _radius = radius;
}

有什么想法吗?



Best Answer-推荐答案


您应该尝试操作按钮的层,即;

#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)initWithCoderNSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.clipsToBounds = NO;

    }
    return self; }


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

}

- (void)setShadowOffsetCGSize)shadowOffset {
    _shadowOffset = shadowOffset;
    self.layer.shadowOffset = shadowOffset;
    [self.layer setNeedsDisplay];

}

- (void)setShadowRadiusCGFloat)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

关于ios - 试图创建一个圆角 UIButton 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271752/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap