Пользовательский метод drawRect UIView никогда не вызывается, если начальный кадр - CGRectZero

У меня есть довольно простой настраиваемый подкласс 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:, но почему он никогда не вызывается даже после изменения кадра?

11
задан Pang 27 March 2018 в 07:30
поделиться