iPhone: линейные разъемы, прикрепленные к фигурам - PullRequest
0 голосов
/ 29 февраля 2012

Как бы вы нарисовали линейный соединитель между двумя фигурами, чтобы линия проходила под соответствующими углами и двигалась вместе с любым движением фигур?

Примерно так:

enter image description here

Я думаю, что мне нужна UIBezier Curve, но любые учебные пособия или помощь в начале работы будут оценены.

1 Ответ

0 голосов
/ 09 марта 2012

Я думаю, UIBezierPath - верный путь, поэтому вам обязательно стоит прочитать его. Я написал быстрый пример для создания пути, есть еще много опций, которые я не использую.

Рисование дорожек не самая сложная часть. Вам придется как-то отслеживать все созданные вами ящики и хранить связи между ними , это во многом зависит от того, как вы храните ящики, но реляционная база данных выглядит как правильное решение. С учетом этих объектов и соединений вы будете генерировать пути в drawrect для одного из ваших представлений.

- (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];
}

Это будет дополнено кодом, который может указывать, расположены ли прямоугольники справа друг от друга или слева, и вы можете согнуть строку с помощью addCurveToPoint: или ряда других методов в UIBezierPath. Большая часть пути зависит от вашего стиля, нет единого правильного стиля для соединения двух точек.

...