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