我为iOS设计了一款纸牌游戏(针对人类的卡片),有两种类型的卡片,白色卡片和黑色卡片。所以我实现了一个继承自UIView的CardView类,以及两个继承自CardView的类WhiteCardView和BlackCardView。 正如你猜测的那样,几乎只有颜色会在这两者之间发生变化,但我仍然想要两个不同的视图类(即使它们目前几乎相同)。所以,我有四个问题。
编辑:我想找出自己的答案,但对于最后一个,我迷失了。
1.我需要有关实施的建议,我不知道我是否正确设置卡片的颜色,这些卡片存储在CardView中但设置在我的WhiteCardView的init中。我想我必须只覆盖一个init,但我不知道哪一个。因此,如果有人能够确认或纠正我已经做过的事情,那就太好了。感谢
这是我的CardView代码:
IB_DESIGNABLE
@interface CardView : UIView
-(void)customDrawUI;
-(void)setData;
@property (nonatomic) UIColor* IBInspectable secondaryColor;
@property (nonatomic) UIColor* IBInspectable primaryColor;
@property(nonatomic) UILabel* txtLabel;
@end
@implementation CardView
-(void)customDrawUI{
self.layer.cornerRadius=5.0;
self.backgroundColor = self.primaryColor;
}
-(void)setData{
self.txtLabel.text = @"some text";
}
@end
WhiteCardView代码:
IB_DESIGNABLE
@interface WhiteCardView : CardView
@end
@implementation WhiteCardView
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect myFrame = self.bounds;
CGContextSetLineWidth(context, 1);
CGRectInset(myFrame, 5, 5);
[self.secondaryColor set];
UIRectFrame(myFrame);
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
self.primaryColor= [UIColor whiteColor];
self.secondaryColor= [UIColor blackColor];
[super customDrawUI];
[super setData];
}
return self;
}
@end
2.在界面构建器中(我正确地为每张卡定义了自定义类),我的视图没有实时渲染,我的drawRect方法WhiteCardView中的代码被执行但我看不到任何变化。 当我运行我的应用程序时,我得到相同的结果。只是白色矩形,没有任何圆角。 知道为什么我的观点没有变化吗?
编辑:我没有将IBDESIGNABLE标记放在正确的位置,现在可以了!
3.有没有办法在父drawRect方法中执行该行:self.backgroundColor = self.primaryColor;
?因为它目前同时存在:White和BlackCardView,并且肯定有一种方法可以在父类中执行它(我将为这两个类添加公共代码,所以我需要一种方法来实现它) 。
也许可以在CardView的init中执行此操作,但由于它目前无法正常工作,我无法对其进行测试。
编辑:我发现,无法从drawRect调用setBackground,因此我在CardView类中定义了一个新方法来执行此操作。我从init方法中调用它。
4.最重要的部分:如何在每张卡上添加标签(不是通过界面构建器,而是通过CardView类),并能够以编程方式设置其内容? 我为该标签定义了一个属性,并设置了它的值,但我不知道如何渲染它。