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;
}
........
надеюсь, что это может помочь вам.