我试图了解如何使 drawrect 使用的值在我的班级实例中保持唯一。下面的示例类绘制了一个三角形。现在设置的方式如果您使用 [[alloc] initWithFrame] 创建 this 的两个实例,其中两个框架的大小不同,您会注意到两个三角形都是以类的第二个实例的大小绘制的。如果您的第一个实例小于第二个实例,它将被其矩形剪裁。
- 如果我在 drawrect 中声明 tSize 大小将不同(正确)
- 如果我在 ATriangle.h 和 @synthesize 中声明 tSize 大小将不同(正确)
- 两个initWithFrame方法连续运行,然后运行两个drawrect,大概来自needsDisplay队列。
所以我的问题是,关于drawrect,范围究竟是如何工作的,因为除了最模糊的术语外,我读过的教程都没有提到这种行为。他们说只有一个上下文,这两个实例似乎是这样,但他们似乎没有与我的其他班级分享这一点。我错过了这艘船。到底是怎么回事?
#import "ATriangle.h"
@implementation ATriangle
UIColor *divColor;
CGFloat tSize;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
divColor = [UIColor colorWithWhite:1.0 alpha:0.5];
self.tSize = (frame.size.width / 3);
}
return self;
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, divColor.CGColor);
CGContextMoveToPoint(context, (rect.size.width / 2), 0);
CGContextAddLineToPoint(context, (rect.size.width / 2)-tSize, tSize);
CGContextMoveToPoint(context, (rect.size.width / 2) , 0);
CGContextAddLineToPoint(context, (rect.size.width / 2)+tSize, tSize);
CGContextAddLineToPoint(context, (rect.size.width / 2)-tSize, tSize);
CGContextFillPath(context);
}
@end