1

次のようにして、ビューをグラデーションでカスタマイズし、uilabel を追加しています。

@implementation ECertificateViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    CustomViewBackGround  *bgView       =   [[CustomViewBackGround alloc] initWithFrame:CGRectMake(0, 0, 301, 26)];
    [self.mainView addSubview:bgView];
}


#import "CustomViewBackGround.h"

@implementation CustomViewBackGround
- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        CGFloat height                  =   20.0;
        CGFloat x                       =   5;
        CGFloat y                       =   3;
        titleLabel                      =   [[UILabel alloc] initWithFrame:CGRectMake(x, y, self.bounds.size.width - 2 * x, height)] ;
        titleLabel.text                 =   @"This is my label";
        titleLabel.textAlignment        =   NSTextAlignmentLeft;
        titleLabel.opaque               =   NO;
        titleLabel.backgroundColor      =   [UIColor clearColor];
        titleLabel.font                 =   [UIFont boldSystemFontOfSize:14];
        titleLabel.textColor            =   [UIColor lightGrayColor];
        [self addSubview:titleLabel];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    CGContextRef context            =   UIGraphicsGetCurrentContext();

    CGColorRef whiteColor           =   [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
    CGColorRef lightGrayColor       =   [UIColor colorWithRed:230.0/255.0
                                                        green:230.0/255.0
                                                         blue:230.0/255.0
                                                        alpha:1.0].CGColor;
    CGColorRef separatorColor       =   [UIColor colorWithRed:208.0/255.0 green:208.0/255.0 blue:208.0/255.0 alpha:1.0].CGColor;

    CGRect paperRect                =   self.bounds;

    // Fill with gradient
    drawLinearGradient(context, paperRect, whiteColor, lightGrayColor);

    // Add white 1 px stroke
    CGRect strokeRect           =   paperRect;
    strokeRect.size.height     -=   1;
    strokeRect                  =   rectFor1PxStroke(strokeRect);

    CGContextSetStrokeColorWithColor(context, whiteColor);
    CGContextSetLineWidth(context, 1.0);
    CGContextStrokeRect(context, strokeRect);

    // Add separator
    CGPoint startPoint          =   CGPointMake(paperRect.origin.x, paperRect.origin.y + paperRect.size.height - 1);
    CGPoint endPoint            =   CGPointMake(paperRect.origin.x + paperRect.size.width - 1, paperRect.origin.y + paperRect.size.height - 1);
    draw1PxStroke(context, startPoint, endPoint, separatorColor);            
}

シミュレーターで実行しているとき、期待どおりにすべてが正常に機能しています。ただし、デバイスにインストールすると、アプリがクラッシュし、

[Not A Type retain]: message sent to deallocated instance,objctive c

なぜこの問題が発生するのか、何か考えはありますか?

4

1 に答える 1