a subvista @iOS se muestra como un rectángulo negro si se sobrescribe drawRect

Tengo un guión gráfico que carga y carga una UIView personalizada. También se agrega una vista secundaria a la vista en el guión gráfico. Funcionó bien hasta que sobrescribí el método drawRect de la vista secundaria, luego vi un rectángulo negro en lugar de la vista secundaria. Aquí está el código:

#import <UIKit/UIKit.h>
#import "MySubview.h"

@interface MyView : UIView

@end
#import "MyView.h"

@implementation MyView

- (void) awakeFromNib
{
    CGRect frame = [self frame];
    MySubview* sv = [[MySubview alloc] initWithFrame:frame];
    [self addSubview:sv];
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

@end
#import <UIKit/UIKit.h>

@interface MySubview : UIView

@property (retain, nonatomic) NSString* text;
@property (retain, nonatomic) UILabel* label;

@end
#import "MySubview.h"

@implementation MySubview

@synthesize text, label;


- (void)attachLabel
{
    text = @"Hello";
    label = [[UILabel alloc] init];
    [label setText:text];
    [label setFont:[UIFont fontWithName:@"Futura" size:18]];
    [label setBackgroundColor:[UIColor clearColor]];

    [label sizeToFit];

    CGRect labelFrame = label.frame;
    labelFrame.origin.x = (self.frame.size.width  - labelFrame.size.width) / 2;
    labelFrame.origin.y = (self.frame.size.height - labelFrame.size.height) / 2;
    label.frame = labelFrame;

    [self addSubview:label];
}

- (void)awakeFromNib
{
    [self attachLabel];
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self attachLabel];
    }
    return self;
}

// Works if I comment this out!
- (void)drawRect:(CGRect)rect
{
}

@end

Actualiza - Código de dibujo agregado a continuación:

- (void)drawRectWithRoundBorders:(CGRect)rect
{
    [super drawRect:rect];

    // Parameters used for drawing.
    const CGFloat lineWidth = 5;
    const CGFloat shadowOffset = 3;
    const CGFloat shadowBlur = 4;
    const CGFloat spaceToBB = 10;   // Space to the bounding box of this view.
    const CGFloat cornerRadii = 5;
    const CGFloat lineColor[4] = { 0, 0, 0, 1 };

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(ctx, lineWidth);
    CGContextSetStrokeColor(ctx, lineColor);
    CGContextSetShadow(ctx, CGSizeMake(shadowOffset, shadowOffset), shadowBlur);

    CGRect innerRect = rect;

    innerRect.size.width -= 2*spaceToBB;
    innerRect.size.height -= 2*spaceToBB;
    innerRect.origin.x += spaceToBB;
    innerRect.origin.y += spaceToBB;

    UIBezierPath *path = 
    [UIBezierPath bezierPathWithRoundedRect:innerRect 
                          byRoundingCorners:UIRectCornerAllCorners 
                                cornerRadii:CGSizeMake(cornerRadii, cornerRadii)
     ];

    CGContextAddPath(ctx, path.CGPath);
    CGContextStrokePath(ctx);
}


- (void)drawRect:(CGRect)rect
{
    [self drawRectWithRoundBorders:rect];
}

Actualiza

arece que funciona cuando lleno primero el cuadro delimitador de la vista secundaria con algo de color.

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat white[] = {1, 1, 1, 0.5};
CGContextSetFillColor(ctx, white);
CGContextAddRect(ctx, rect);
CGContextFillPath(ctx);

Respuestas a la pregunta(4)

Su respuesta a la pregunta