281 votes

Cacao Touch : Comment changer UIView ' s couleur de la bordure et l’épaisseur ?

J'ai vu dans l'inspecteur que je peux changer la couleur d'arrière-plan, mais j'aimerais aussi changer la couleur de la bordure et de l'épaisseur, est-ce possible?

Merci

601voto

Vladimir Points 110327

Vous avez besoin d'utiliser la vue de la couche de définir la frontière de la propriété. e.g:

#import <QuartzCore/QuartzCore.h>
...
view.layer.borderColor = [UIColor redColor].CGColor;
view.layer.borderWidth = 3.0f;

Vous avez également besoin de lien avec QuartzCore.cadre pour accéder à cette fonctionnalité.

17voto

rohan-patel Points 4236

Vous pouvez également créer de la frontière avec la couleur de votre souhait..

view.layer.borderColor = [UIColor colorWithRed:r/255 green:g/255 blue:b/255 alpha:1.0].CGColor;

*r,g,b sont les valeurs de 0 à 255..Si vous connaissez la valeur RVB de la couleur vous pouvez définir ici.. :-)

8voto

Nicolae Surdu Points 2045

Lorsque j'utilise Vladimir CALayer solution, et sur la vue que j'ai une animation, comme un modal UINavigationController de le renvoyer, je vois beaucoup de pépins qui se passe et d'avoir le dessin des problèmes de performances.

Donc, une autre façon d'atteindre cet objectif, mais sans les pépins et la perte de performances, est de faire un custom UIView et de mettre en œuvre l' drawRect message comme ceci:

- (void)drawRect:(CGRect)rect
{
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(contextRef, 1);
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0);
    CGContextStrokeRect(contextRef, rect);    
}

4voto

DEzra Points 930

Je ne dirais pas substitution de la drawRect en raison de provoquer un gain de performance.

Au lieu de cela, je voudrais modifier les propriétés de la classe comme ci-dessous (dans votre personnalisé uiview):

  - (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
      self.layer.borderWidth = 2.f;
      self.layer.borderColor = [UIColor redColor].CGColor;
    }
  return self;

Je ne vois pas de saccades lors de la prise d'approche ci-dessus - ne sais pas pourquoi la mettre dans le initWithFrame s'arrête là ;-)

1voto

Matt Becker Points 811

Si vous ne souhaitez pas modifier la couche d'un UIView, vous pouvez toujours intégrer la vue dans un autre point de vue. La vue parent aurait sa couleur d'arrière-plan définie à la couleur de la bordure. Il serait également légèrement plus grande, en fonction de la largeur que vous voulez à la frontière.

Bien sûr, cela ne fonctionne que si votre point de vue n'est pas transparent et vous ne souhaitez qu'une seule couleur de la bordure. L'OP voulait la frontière, dans la vue elle-même, mais cela peut être une alternative viable.

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