web-dev-qa-db-fra.com

UIView Couleur De Fond Toujours Noir

Lorsque j'ajoute une UIView à un contrôleur de vue par programme, je ne peux pas modifier la couleur d'arrière-plan en une autre couleur, elle reste toujours noire.

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    self.backgroundColor = [UIColor blueColor];

    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(100, 33)];
    [path addLineToPoint:CGPointMake(200, 33)];
    path.lineWidth = 5;
    [[UIColor redColor] setStroke];
    [path stroke];
}

Lorsque je commente drawrect: out et ajoute self.backgroundColor = [UIColor blueColor]; à l'initialiseur, la couleur change:

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

Pourquoi est-ce et que dois-je changer? En fait, j'aimerais que l'arrière-plan soit transparent.

19
Pete

backgroundColor de votre vue est ignorée si vous dessinez vous-même avec drawRect. Changez votre code en

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    [[UIColor blueColor] setFill];  // changes are here
    UIRectFill(rect);               // and here 

    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(100, 33)];
    [path addLineToPoint:CGPointMake(200, 33)];
    path.lineWidth = 5;
    [[UIColor redColor] setStroke];
    [path stroke];
}
16
Avt

Au fur et à mesure que vous implémentez drawRect:, cela remplacera tout dessin par défaut de la UIView

Vous devez définir la propriété opaque de votre vue personnalisée sur NO et effacer le contexte avant de rendre le chemin:

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

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

    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(100, 33)];
    [path addLineToPoint:CGPointMake(200, 33)];
    path.lineWidth = 5;
    [[UIColor redColor] setStroke];
    [path stroke];
}

https://developer.Apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//Apple_ref/occ/instp/UIView/opaque

Une vue opaque est censée se remplir de contenu entièrement opaque . En d'autres termes, le contenu doit avoir une valeur alpha de 1,0. Si la vue Est opaque et ne remplit pas ses limites ou contient un contenu entièrement Ou partiellement transparent, les résultats sont imprévisibles. Vous Devez toujours définir la valeur de cette propriété sur NO si la vue est Totalement ou partiellement transparente.

25
iOSX

Définissez la couleur d'arrière-plan dans la méthode initWithFrame: et faites votre dessin personnalisé dans drawRect :. Cela devrait pouvoir résoudre votre problème. DrawRect: est implémenté afin de faire un dessin personnalisé pour ne pas définir les propriétés spécifiques à la vue.

@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
      self.backgroundColor = [UIColor yellowColor];
    }
    return self;
}
- (void)drawRect:(CGRect)rect{
    UIBezierPath *path = [[UIBezierPath alloc] init];
    [path moveToPoint:CGPointMake(100, 33)];
    [path addLineToPoint:CGPointMake(200, 33)];
    path.lineWidth = 5;
    [[UIColor redColor] setStroke];
    [path stroke];

}

@end
1
Sandeep
backgroundViewController.providesPresentationContextTransitionStyle = YES;
backgroundController.definesPresentationContext = YES;
[overlayViewController setModalPresentationStyle:UIModalPresentationOverCurrentContext];

ou

 enter image description here

Je me suis battu pendant plusieurs heures. S'il s'agit d'une séquence modèle, définissez le contexte actuel en tant que propriété. !

1
A.G