54 votes

Définition d'un arrière-plan CGContext transparent

Je n'arrive toujours pas à tracer une ligne avec CGContext. En fait, je suis allé au trait pour dessiner, mais maintenant, j'ai besoin que l'arrière-plan du Rect soit transparent pour que l'arrière-plan existant soit visible. Voici mon code de test:

 (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
    CGContextSetAlpha(context,0.0);
    CGContextFillRect(context, rect);

    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    CGContextSetLineWidth(context, 5.0);
    CGContextMoveToPoint(context, 100.0,0.0);
    CGContextAddLineToPoint(context,100.0, 100.0);
    CGContextStrokePath(context);
}
 

Des idées?

74voto

David Kanarek Points 8816

Après UIGraphicsGetCurrentContext() call CGContextClearRect(context,rect)

Edit: D'accord, compris.

Votre vue personnalisée avec la ligne devrait avoir les éléments suivants:

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

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    CGContextSetLineWidth(context, 5.0);
    CGContextMoveToPoint(context, 100.0,0.0);
    CGContextAddLineToPoint(context,100.0, 100.0);
    CGContextStrokePath(context);
}
 

Mon test utilisait ceci comme UIViewController très basique:

 - (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *v = [[UIImageView alloc] initWithFrame:self.view.bounds];
    [v setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:v];
    TopView *t = [[TopView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:t];
    [v release];
    [t release];
}
 

43voto

DizAsm Points 867

Moyen facile:

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

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    //your code
}
 

3voto

en-菜鸟.. Points 21

J'ai le même problème, alors je le trouve. J'écrase l'init La méthode est -(id)initWithFrame:(CGRect)rect. Dans cette méthode self.background = [UIColor clearColor]; mais j'utilise cette vue dans un fichier xib !!! Cela appellera la méthode init est

 -(id)initWithCoder:(NSCoder*)aDecoder;
 

Donc écrasez toute la méthode init et la configuration de BackgroundColor fonctionnera correctement.

2voto

Codrut Points 19
 CGContextClearRect(context,rect) 
 

Si le contexte fourni est un contexte de fenêtre ou de bitmap, Quartz efface le rectangle. Pour les autres types de contexte, Quartz remplit le rectangle de manière dépendante du périphérique. Cependant, vous ne devez pas utiliser cette fonction dans des contextes autres que les contextes fenêtre ou bitmap.

0voto

oflannabhra Points 79

Vous avez du mal à comprendre la question ici, mais si vous ne parvenez pas à afficher une "image de fond" dans UIView à travers une "vue de dessus" dans laquelle vous dessinez, une solution est topView.backgroundColor = [UIColor clearColor]; je rencontrais (je pense ) ce même problème et cela a résolu pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X