2

角の丸い 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;
}

何か案は?

4

1 に答える 1

2

Button ie; のレイヤーを操作してみてください。

#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

編集:- サブクラス クラスの割り当てを削除してから、すべてのプロパティを手動で削除する必要があります。もう一度ボタンにクラスを割り当ててから、プログラムを実行します。

これをチェックして 、

ここに画像の説明を入力

出力:-

ここに画像の説明を入力

于 2016-05-17T09:29:20.683 に答える