セッターの可能性をストーリーボードに直接持ち込むことが非常に便利でIBDesignable
あることがわかりました。IBInspectable
そのように迅速なプロジェクトで使用します
import Foundation
import UIKit
@IBDesignable extension UIView {
@IBInspectable var addBorderTop: CGFloat {
set {
addBorderUtility(0, y: 0, width: frame.width, height: newValue, color: layer.borderColor)
}
get {
return 0
}
}
@IBInspectable var addBorderBottom: CGFloat {
set {
addBorderUtility(0, y: frame.height - newValue, width: frame.width, height: newValue, color: layer.borderColor)
}
get {
return 0
}
}
@IBInspectable var addBorderLeft: CGFloat {
set {
addBorderUtility(0, y: 0, width: newValue, height: frame.height, color: layer.borderColor)
}
get {
return 0
}
}
@IBInspectable var addBorderRight: CGFloat {
set {
addBorderUtility(frame.width - newValue, y: 0, width: newValue, height: frame.height, color: layer.borderColor)
}
get {
return 0
}
}
private func addBorderUtility(_ x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat, color: CGColor?) {
let border = CALayer()
border.backgroundColor = color
border.frame = CGRect(x: x, y: y, width: width, height: height)
layer.addSublayer(border)
}
}
これは魅力のように機能しています。そこで、objective-c プロジェクトで同じことを行うことにしました。ここで UIView を拡張しようとすると、どのように見えるかです
UIView+Border.h
#import <UIKit/UIKit.h>
@interface UIView ()
@property (nonatomic) IBInspectale CGFloat addBorderTop;
@property (nonatomic) IBInspectale CGFloat addBorderBottom;
@property (nonatomic) IBInspectale CGFloat addBorderLeft;
@property (nonatomic) IBInspectale CGFloat addBorderRight;
@end
UIView+Border.m
#import "UIView+Border.h"
@interface UIView ()
IB_DESIGNABLE
@implementation UIView ()
- (void) setAddBorderTop: (CGFloat) newValue
{
addBorderUtility(0, y: 0, width: frame.width, height: newValue, color: layer.borderColor)
}
- (void) setAddBorderBottom: (CGFloat) newValue
{
addBorderUtility(0, y: frame.height - newValue, width: frame.width, height: newValue, color: layer.borderColor)
}
- (void) setAddBorderLeft: (CGFloat) newValue
{
addBorderUtility(0, y: 0, width: newValue, height: frame.height, color: layer.borderColor)
}
- (void) setAddBorderRight: (CGFloat) newValue
{
addBorderUtility(frame.width - newValue, y: 0, width: newValue, height: frame.height, color: layer.borderColor)
}
- (void) addBorderUtility: (CGFloat):x y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height color:(CGColor)color
{
CALayer *border = [CALayer init]
border.backgroundColor = color
border.frame = CGRect(x: x, y: y, width: width, height: height)
layer.addSublayer(border)
}
@end
しかし、ストーリーボードの右側のメニューからカスタム変数を設定することはできません。また、カスタム変数の 1 つと同じ名前の変数を追加しようとしましたUser Defined Runtime Attributes
が、アプリを実行しても何も起こりませんでした。
それを行う方法はありますか?ありがとう