2012-02-29 1 views
0

Comment dessiner un connecteur de ligne entre deux formes, de sorte que la ligne dessine avec les angles appropriés et se déplace avec n'importe quel mouvement des formes?iPhone: connecteurs de ligne attachés à des formes

Quelque chose comme ceci:

enter image description here

J'imagine une courbe UIBezier est ce que je dois, mais des tutoriels ou aider à commencer serait apprécié.

+0

Avez-vous eu une logique pour les connecter - quand dessiner une ligne droite et quand dessiner un 90 degrés? – Prathiba

+0

Non, je ne suis pas encore très loin. – Jordan

Répondre

0

Je pense que UIBezierPath est la bonne façon de procéder, alors vous devriez certainement lire à ce sujet. J'ai écrit un exemple rapide pour faire un chemin, il y a beaucoup plus d'options que je n'utilise pas.

Dessiner les chemins n'est pas la partie difficile. Vous devrez suivre toutes les boîtes que vous créez et stocker les connexions entre eux en quelque sorte, cela dépend beaucoup de la façon dont vous stockez les boîtes, mais une base de données relationnelle se sent comme la bonne solution. Étant donné ces objets et connexions, vous générez des chemins dans drawrect pour l'une de vos vues.

- (void)drawRect:(CGRect)rect { 

    // say we already created a "Make" box 
    UIBoxThing *make = ... 
    // and here we already created a "Diagrams" box 
    UIBoxThing *diagrams = ... 

    [[UIColor blackColor] setStroke]; 

    // since we know Diagrams and Make are connected (via some other data), we must draw an arrow between them 
    UIBezierPath *path = [[UIBezierPath alloc] init]; 
    path.lineWidth = 2; 

    // the midpoint of the right side of our first box 
    CGPoint start = CGPointMake(make.frame.origin.x+make.frame.size.width, make.frame.origin.y+(make.frame.size.height/2)); 

    [path moveToPoint:start]; 

    // the midpoint of the left size of our second box 
    CGPoint end = CGPointMake(diagram.frame.origin.x, diagram.frame.origin.y+(diagram.frame.size.height/2)); 

    [path addLineToPoint:end]; 

    [path stroke]; 
} 

Ce serait complimenté avec le code qui peut dire si les boîtes sont à droite de l'autre ou de la gauche, et vous pouvez plier la ligne avec addCurveToPoint: ou un certain nombre d'autres méthodes sur UIBezierPath. La plupart des trucs de chemin dépendent de votre style, il n'y a pas de style correct pour connecter deux points.

+0

J'accepte cette réponse. Vous cherchez un bon exemple de code. Merci! – Jordan