90 votes

Tracer la ligne dans UIView

J’ai besoin de tracer une ligne horizontale dans un UIView. Ce qui est la meilleure façon de le faire. Par exemple, je veux tracer une ligne horizontale noire à y-coord = 200.

Je ne suis pas en utilisant Interface Builder.

314voto

b123400 Points 3811

C’est peut-être un peu tard, mais je tiens à ajouter qu’il existe une meilleure façon. À l’aide de UIView est simple, mais relativement lente. Cette méthode substitue la façon dont la vue se dessine et est plus rapide :

122voto

Michael Kessler Points 7805

Dans votre cas (ligne horizontale), le plus simple est d’ajouter une sous-vue avec couleur de fond noir et cadre `` .

Code échantillon (je l’espère, qu'il n’y a aucune erreur - je l’ai écrit sans Xcode) :

Une autre façon consiste à créer une classe qui va tracer une ligne dans sa méthode drawRect (vous pouvez voir mon exemple de code pour ce ici).

15voto

Phanindra Points 69

Il suffit d’ajouter une étiquette sans texte et couleur d’arrière-plan. Définir les coordonnées de votre choix et aussi la hauteur et la largeur. Vous pouvez le faire manuellement ou avec Interface Builder.

13voto

Rakesh Points 1285

Vous pouvez l'utilisateur UIBezierPath Classe pour ce:

Et pouvez tirer autant de lignes que vous le souhaitez:

J'ai sous-classé UIView :

    @interface MyLineDrawingView()
    {
       NSMutableArray *pathArray;
       NSMutableDictionary *dict_path;
       CGPoint startPoint, endPoint;
    }

       @property (nonatomic,retain)   UIBezierPath *myPath;
    @end

Et initialisé le pathArray et dictPAth objets qui seront utilisés pour le dessin au trait. Je suis en train d'écrire la partie principale du code à partir de mon propre projet:

- (void)drawRect:(CGRect)rect
{

    for(NSDictionary *_pathDict in pathArray)
    {
        [((UIColor *)[_pathDict valueForKey:@"color"]) setStroke]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
        [[_pathDict valueForKey:@"path"] strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
    }

    [[dict_path objectForKey:@"color"] setStroke]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor)
    [[dict_path objectForKey:@"path"] strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];

}

touchesBegin méthode :

UITouch *touch = [touches anyObject];
startPoint = [touch locationInView:self];
myPath=[[UIBezierPath alloc]init];
myPath.lineWidth = currentSliderValue*2;
dict_path = [[NSMutableDictionary alloc] init];

touchesMoved Méthode:

UITouch *touch = [touches anyObject];
endPoint = [touch locationInView:self];

 [myPath removeAllPoints];
        [dict_path removeAllObjects];// remove prev object in dict (this dict is used for current drawing, All past drawings are managed by pathArry)

    // actual drawing
    [myPath moveToPoint:startPoint];
    [myPath addLineToPoint:endPoint];

    [dict_path setValue:myPath forKey:@"path"];
    [dict_path setValue:strokeColor forKey:@"color"];

    //                NSDictionary *tempDict = [NSDictionary dictionaryWithDictionary:dict_path];
    //                [pathArray addObject:tempDict];
    //                [dict_path removeAllObjects];
    [self setNeedsDisplay];

touchesEnded Méthode:

        NSDictionary *tempDict = [NSDictionary dictionaryWithDictionary:dict_path];
        [pathArray addObject:tempDict];
        [dict_path removeAllObjects];
        [self setNeedsDisplay];

12voto

hkatz Points 382

Une autre (et un encore plus courte) possibilité. Si vous êtes à l’intérieur de drawRect, quelque chose comme ce qui suit :

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