MiniView という UIView サブクラスを作成しました。
次のようにviewControllerに追加してみます:
@interface SomeViewController ()
@property (strong, nonatomic) MiniView *miniView;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
self.miniView = [[MiniView alloc] initWithFrame:CGRectMake(20.f, 20.f, 200.f, 200.f)];
_miniView.backgroundColor = [UIColor blackColor];
[self.view addSubview:_miniView];
}
MiniView クラスは次のようになります。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect
{
NSLog(@"DRAW RECT");
CGContextRef context = UIGraphicsGetCurrentContext();
UIColor * redColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
CGContextSetFillColorWithColor(context, redColor.CGColor);
CGContextFillRect(context, self.bounds);
}
しかし、明示的に呼び出さない限り、setNeedsLayout メソッド内から drawRect が呼び出されることはありません。また、何も描画しません。drawRect メソッドに UIImageView を追加してみましたが、問題ないようです。しかし、上記のコードは何も生成しません。
エラーも表示されます:
: CGContextSetFillColorWithColor: 無効なコンテキスト 0x0。これは重大なエラーです。このアプリケーション、またはアプリケーションが使用するライブラリは無効なコンテキストを使用しているため、システムの安定性と信頼性が全体的に低下しています。この通知は厚意によるものです。この問題を修正してください。今後のアップデートで致命的なエラーになります。
drawRect メソッドでログ ステートメントを出力して 'rect' 値を出力すると、200 x 200 で正しいため、コンテキストが 0x0 である理由がわかりません。
したがって、1 つの問題は drawRect が呼び出されないことであり、もう 1 つの問題は、明示的に呼び出すと何も表示されないことです...