2014-10-17 5 views
-1

enter image description hereРазработка iOS: интерактивный график

Пожалуйста, взгляните на изображение выше. Красные круги представляют собой трогательное движение пользователя. Поэтому, если пользователь коснулся места, где находится первый круг (слева), тогда должен быть граф, который перекошен влево. Если пользователь коснулся середины, нормально распределенный граф. Если пользователь касается правой части, график должен быть перекошен вправо.

Я новичок в разработке iOS, и мне интересно, как я могу достичь такой функции. Будем очень благодарны за любые рекомендации в отношении подходящих библиотек, рамок, документов.

ответ

2

ОК, давайте рассмотрим компоненты этого по одному.

  1. Чтобы узнать, где прикасается пользователь, вы можете использовать что-то вроде UIPanGestureRecognizer или UITapGestureRecognizer.

  2. Чтобы нарисовать кривую, общий метод, чтобы добавить CAShapeLayer:

    CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
    shapeLayer.strokeColor = [UIColor blueColor].CGColor; 
    shapeLayer.fillColor = [UIColor clearColor].CGColor; 
    shapeLayer.lineWidth = 4.0; 
    [self.view.layer addSublayer:shapeLayer]; 
    

    Вы можете установить path для этого CAShapeLayer, и каждый раз, когда вы изменяете path, кривая на взгляд изменение. Если вы часто меняете этот путь (например, вы используете UIPanGestureRecognizer, который вызывается каждый раз, когда палец пользователя перемещается), вы эффективно оживляете изменение кривой.

  3. Итак, как вы создаете path? Ну, вы просто создать UIBezierPath

    UIBezierPath *path = [UIBezierPath bezierPath]; 
    [path moveToPoint:...]; 
    
    // build the path as a series of curves 
    // 
    // [path addCurveToPoint:... 
    //   controlPoint1:... 
    //   controlPoint2:...]; 
    
    // or a series of lines that are so numerous that it looks like a nice curve 
    // 
    // for (NSInteger x = 0; x <= view.bounds.size.width; x++) { 
    //  [path addLineToPoint:...]; 
    // } 
    
    shapeLayer.path = path.CGPath; 
    

    Итак, вопрос только в том, нужно ли кривая быть нормальное распределение, или вы просто хотите что-то рисует плавную кривую с локальным максимумом, где пользователь прикоснулся.

    Если вы хотите что-то точно и математически представить какую-то определенную кривую (например, если в центре это нормальное распределение), вам нужно придумать уравнение для представления вашей кривой (в зависимости от того, где пользователь нажал). Затем вы рисуете свою кривую, построив целую кучу точек, используя addLineToPoint с UIBezierPath.

    Если вам нужно только что-то, что близко, вы можете приблизиться к нему двумя путями безье (созданными с помощью addCurveToPoint:controlPoint1:controlPoint2:).

Мы не собираемся писать это для вас, но это основные строительные блоки решения. Я бы предложил вам взять их по одному, сделать небольшое исследование по каждому, попробовать, а затем уточнить. Начните с малого и стройте оттуда.

+0

Большое спасибо. –

Смежные вопросы