iOS - Какие методы Objective-C мне нужны, чтобы заставить IBInspectable работать?

Это следующий код, который я имею для кастома UIView класс, который я сделал, где вы можете контролировать его тени в конструкторе интерфейса:

#import "ShadowView.h"

@interface ShadowView ()

@property (copy, nonatomic) IBInspectable UIColor *shadowColor;
@property (assign, nonatomic) IBInspectable CGFloat xOffset;
@property (assign, nonatomic) IBInspectable CGFloat yOffset;
@property (assign, nonatomic) IBInspectable float shadowOpacity;
@property (assign, nonatomic) IBInspectable CGFloat shadowRadius;
@property (assign, nonatomic) IBInspectable CGFloat xInset;
@property (assign, nonatomic) IBInspectable CGFloat yInset;

@end

@implementation ShadowView

#pragma mark - Lifecycle

//-(void)awakeFromNib {
//    [super awakeFromNib];
//    [self setUpView];
//}

-(void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    [self setUpView];
}

#pragma mark - Helpers

-(void)setUpView {
    self.layer.shadowColor = _shadowColor.CGColor;
    self.layer.shadowOffset = CGSizeMake(_xOffset, _yOffset);
    self.layer.shadowOpacity = _shadowOpacity;
    self.layer.shadowRadius = _shadowRadius;
    CGRect shadowRect = CGRectInset(self.bounds, _xInset, _yInset);
    self.layer.shadowPath = [[UIBezierPath bezierPathWithRect:shadowRect] CGPath];
}

@end

Когда я использую awakeFromNibтени работают на симуляторе iPhone 5, но только половина работает на эмуляторе iPhone6. drawRect кажется, работает для всех, но я видел примеры Swift, которые используют init(frame: CGRect) а также init?(coder aDecoder: NSCoder), Какие методы мне нужны для того, чтобы все время делать это правильно?

Примечание: я не использую IB_DESIGNABLE в этом случае, поскольку тени не отображаются в конструкторе интерфейса.

1 ответ

Когда вы используете IBInspectable, вам не нужно было добавлять метод (void)setupview для установки всех свойств. Вы должны добавить отдельный метод установки, как показано ниже: например,

-(void)setShadowColor:(UIColor)color {
     _shadowColor = color;
     self.layer.shadowColor = _shadowColor.CGColor;
}
........

надеюсь, что это может помочь вам.

Другие вопросы по тегам