2012-07-01 2 views
4

Я новичок в программировании iPhone. Мне нужно создать круги, как показано на рисунке 1, где его нужно разделить на шесть разных частей с четырьмя различными уровнями (см. Рис. 1). Кроме того, мне нужно создать круг в соответствии с данными, как показано на рисунке 2. Каждая часть должна быть доступна для клика, чтобы увеличить конкретную часть (см. Рис. 3).Круг чертежа в Objective-c

enter image description here
Рисунок 1: Иллюстрирует шесть различных цветов, где две из них разделены на один, а остальные четыре из них разделен на три части.
enter image description here
Рисунок 2: Показывает результаты различных категорий на разных уровнях.
enter image description hereРисунок 3: Является увеличенным зрением выбранной категории.

У меня есть раскадровка, которая загружает пользовательский UIView и использует метод drawRect для рисования круга.

Вопрос в том, как создать круговую диаграмму, как цифры?

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

+0

Просто интересно, если у вас есть рабочий пример создания этих сегментов круга? Я ищу создать аналогичный эффект, но я не смог получить код ниже, чтобы создать этот эффект. –

ответ

1

Круговая диаграмма Пример:

int sum = 0; 
CGFloat offset; 
CGFloat angleArray[numberOfSections+1]; 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetAllowsAntialiasing(context, true); 
CGContextSetShouldAntialias(context, true); 

for(int i=0; i<numberOfSections; i++) { 
    sum += angle; 
} 

for(int i=0; i<numberOfSections; i++) { 
    angleArray[i] = (float)((angle)/(float)sum)*(2*M_PI); 
    CGContextMoveToPoint(context, radius, radius); 

    if(i == 0) { 
     CGContextAddArc(context, radius, radius, radius, 0, angleArray[i], 0); 
    } else { 
     CGContextAddArc(context, radius, radius, radius, offset, (offset+angleArray[i]), 0); 
    } 
    offset += angleArray[i]; 

    CGContextSetFillColorWithColor(context, ((UIColor *)[hjulColorArray objectAtIndex:i]).CGColor); 
    CGContextClosePath(context); 
    CGContextFillPath(context); 
} 
4

Посмотрите на Quartz 2D Programming Guide, особенно Ellipses и Clipping to Paths секции. Остальное - это просто базовая математика и геометрия.

Подкласс UIView, используйте 2D-каркас Quartz, чтобы нарисовать круги и, возможно, реализовать методы touchesBegan: и touchesEnded: для обработки кранов на кругах.

0

На самом деле я думаю, что этот пересмотренный ответ поможет вам в долгосрочной перспективе. Взгляните на документацию для этого:

CGPathAddLineToPoint  
CGPathAddArc 

Это то, что я обычно делал в основном именно тем, что вы пытаетесь сделать.

+0

Я не понимаю, что вы просите. Цель в каком контексте? –

1

Если вы каким-либо образом хотите изменить анимацию (например, при увеличении категории на последнем изображении), вы должны попробовать и использовать как можно больше Core Animation.

Посмотрите на this great tutorial on making a custom animatable pie chart with Core Animation. Я уверен, что вы можете изменить его, чтобы получить то, что вы хотите.

Кроме того, если вы не заботитесь о анимации, и все в порядке только с отображением кругов, которые переходят из состояния в состояние, тогда Core Animation, вероятно, просто сделает вещи чрезмерно сложными, и что-то вроде Core Graphics (как и другие ответы) вероятно, правильный путь.

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