У меня есть довольно простой настраиваемый подкласс UIView:
#import "BarView.h"
#import <QuartzCore/QuartzCore.h>
@implementation BarView
@synthesize barColor;
- (void)drawRect:(CGRect)rect
{
NSLog(@"drawRect");
// Draw a rectangle.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, self.barColor.CGColor);
CGContextBeginPath(context);
CGContextAddRect(context, self.bounds);
CGContextFillPath(context);
}
- (void)dealloc
{
self.barColor = nil;
[super dealloc];
}
@end
Если я вызываю initWithFrame: rect для этого класса с каким-нибудь ненулевым прямоугольником, он работает нормально; но когда я вызываю initWithFrame: CGRectZero, drawRect вызывается-никогда-, даже после того, как я изменяю рамку представления на ненулевой прямоугольник.
Я, конечно, понимаю, почему представление с нулевым кадром никогда не будет иметь вызова drawRect:, но почему он никогда не вызывается даже после изменения кадра?