web-dev-qa-db-fra.com

Comment dessiner une ligne dans le constructeur d'interface dans Xcode 4

Je voudrais tracer une simple ligne encartée dans Interface Builder pour séparer certains éléments d'une liste et rendre l'interface utilisateur un peu plus ordonnée. Je ne vois aucune "ligne" ni aucun objet similaire dans la bibliothèque d'objets et il semble impossible de trouver des commandes de dessin dans le générateur Interface.

26
Kongress

J'utilise un UIView très étroit avec backgroundColor défini sur la couleur appropriée. 

62
Drew C

Il n'y a pas de lignes dans la bibliothèque d'interface utilisateur iPhone. NSBox a fourni cette fonctionnalité sur Max OS X, mais aucun élément d’interface utilisateur n’est associé à l’iPhone.

7
EJV

Si vous craignez qu’UIView n’affecte les performances, vous pouvez dessiner une ligne dans le code à l’aide de CAShapeLayers de CoreGraphics.

Chaque UIView a un CALayer, donc tracez la ligne et ajoutez-la aux vues CALayer. Vous pouvez le faire dans un drawRect d'un UIView personnalisé ou dans votre contrôleur de vue:

(Assurez-vous d'ajouter un cadre Quartz à votre projet)

UIBezierPath *linePath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0,self.view.frame.size.width, 1)];

//shape layer for the line
CAShapeLayer *line = [CAShapeLayer layer];
line.path = [linePath CGPath];
line.fillColor = [[UIColor blackColor] CGColor];
line.frame = CGRectMake(xPosition, yPosition, self.view.frame.size.width,1);

[self.view.layer addSublayer:line];
7
JoriDor

Au lieu de la vue, pourquoi ne pas simplement utiliser une étiquette et définir la couleur de fond appropriée?

1
CodeRed

Vous pouvez utiliser la vue de progression comme option pour une ligne horizontale. Il suffit de changer la couleur de teinte et de progresser à 1, ce qui correspond à 100%.

0
Repose

Interface Builder ne vous permet pas de dessiner les ombres essentielles pour une ligne incrustée. Si vous travaillez avec Photoshop, vous le savez. 

Le code suivant dessine un "encart" si la ligne est devant un fond blanc/beige.

UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 1.0f)];
line.backgroundColor = [UIColor colorWithRed:(200.0f/255.0f) green:(200.0f/255.0f) blue:(200.0f/255.0f) alpha:1.0f];
line.layer.shadowColor = [UIColor darkGrayColor].CGColor;
line.layer.shadowOffset = CGSizeMake(0.0f, 1.0f);
line.layer.shadowRadius = 0.5f;
line.layer.shadowOpacity = 0.4f;
line.layer.masksToBounds =NO;
[Background addSubview:line];

N'oubliez pas d'importer <QuartzCore/QuartzCore.h>.

0
chongsj

J'ai utilisé une vue pour la réduire et changer la couleur pour la faire ressembler à une ligne. Mais mon problème est que j'utilise la ligne sur une vue à défilement verticale et que les lignes sont également défilées.

0
confucizious

En tant qu'allitératif - dans Interface Builder, ajoutez une vue dont la hauteur est définie sur 2 points. Connectez un objet IBOutlet à cette vue et définissez sa couleur et sa largeur de bordure de calque:

self.mySeparatorLine.layer.borderWidth = 1.0f; self.mySeparatorLine.layer.borderColor = [UIColor lightGrayColor] .CGColor;

0
user2791976