Tôi biết câu hỏi này đã lâu, nhưng gần đây tôi đã ở trong một tình huống tương tự vì vậy tôi quyết định đưa câu trả lời của tôi cho những người đang ở trong một tình huống như thế này.
tôi muốn để có thể thiết lập các borderColor
và shadowColor
trên một UIView
thông qua giao diện Builder, nhưng loại tài sản borderColor
của một lớp là CGColor
(giống như shadowColor
) mà không phải là một trong những loại được phép thay đổi trong tính năng thuộc tính thời gian chạy do người dùng xác định.
Vì vậy, tôi đã làm một phần mở rộng cho CALayer
và tôi bổ sung thêm hai tính chất gọi là borderColorIB và shadowColorIB có kiểu UIColor:
RuntimeAttributes.h
@import QuartzCore;
@interface CALayer (IBConfiguration)
@property(nonatomic, assign) UIColor* borderColorIB;
@property(nonatomic, assign) UIColor* shadowColorIB;
@end
RuntimeAttributes.m
#import <UIKit/UIKit.h>
#import "RuntimeAttributes.h"
@implementation CALayer (IBConfiguration)
-(void)setBorderColorIB:(UIColor*)color
{
self.borderColor = color.CGColor;
}
-(UIColor*)borderColorIB
{
return [UIColor colorWithCGColor:self.borderColor];
}
-(void)setShadowColorIB:(UIColor*)color
{
self.shadowColor = color.CGColor;
}
-(UIColor*)shadowColorIB
{
return [UIColor colorWithCGColor:self.shadowColor];
}
@end
Bây giờ tôi alredy có thể thiết lập hai thuộc tính này thông qua giao diện Builder như thế này:
- Trong phần 'người dùng định nghĩa runtime thuộc tính' (Identity Thanh tra)
Hãy chắc chắn rằng UIView được chọn và thêm các thuộc tính thời gian chạy sau:
- lớp.borderWidth, Số, 1
- layer.borderColorIB, Màu, someColor
<- my custom property to set the borderColor
- layer.shadowColorIB, Màu, someColor
<- my custom property to set the shadowColor
- layer.shadowOpacity, Số, 0,8
- layer.shadowOffset, kích thước, {5,5}
- lớp. cornerRadius, Số, 5
đây là một hình ảnh để cho bạn thấy làm thế nào tôi đã làm:
... và kết quả sẽ được rõ ràng trong thời gian chạy, không phải trong Xcode:
tôi hy vọng điều này có thể giúp một số người ngoài kia!
Khá ngẫu nhiên, tôi phát hiện ra vấn đề thực sự dường như không phải là InterfaceBuilder, nhưng thực tế là tôi đặt clipToBounds của giao diện ViewerBuilder của tôi = YES. Có NO ở đây là ổn. Vì vậy, tôi đoán sau đó tôi sẽ phải quấn xem trong một lần xem thứ hai với clipToBound = NO và bóng tối. Có cách nào khác không? – Dennis
Tôi có cùng một vấn đề, nhưng đó là vì "Clip Subviews" đã được kiểm tra cho khung nhìn trong Interface Builder. Bỏ chọn làm cho bóng của CALayer hiển thị. – azdev