0

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インターフェイス ビルダーでは影がレンダリングされないため、この場合は使用しません。

4

1 に答える 1

0

IBInspectable を使用する場合、すべてのプロパティを設定するために -(void)setupview メソッドを追加する必要はありませんでした。以下のように別のセッターメソッドを追加する必要があります:例

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

それがあなたを助けることを願っています。

于 2016-09-23T03:11:11.910 に答える