2015-08-23 3 views
8

Я кодировал, как показано ниже, для полукруга в iOS, используя UIBezierPath и CAShapeLayer.начальный и конечный угол UIBezierPath?

clockWiseLayer = [[CAShapeLayer alloc] init]; 

CGFloat startAngle = -M_PI_2; 
CGFloat endAngle = M_PI + M_PI_2; 

CGFloat width = CGRectGetWidth(imageView.frame)/2.0f + 30; 
CGFloat height = CGRectGetHeight(imageView.frame)/2.0f +50; 
CGPoint centerPoint = CGPointMake(width, height); 

float radius = CGRectGetWidth(imageView.frame)/2+10; 

clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint 
                radius:radius 
               startAngle:startAngle 
                endAngle:endAngle 
               clockwise:YES].CGPath; 

clockWiseLayer.fillColor = [UIColor clearColor].CGColor; 
clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; 
clockWiseLayer.borderColor = [UIColor greenColor].CGColor; 
clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; 

clockWiseLayer.strokeStart = 0.0f; 
clockWiseLayer.strokeEnd = 0.5f; 

clockWiseLayer.lineWidth = 2.0f; 
clockWiseLayer.borderWidth = 5.0f; 

clockWiseLayer.shouldRasterize = NO; 
[self.layer addSublayer:clockWiseLayer]; 

Результаты приведены ниже.

enter image description here

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

Это половина круга, но я хочу это на другой стороне, также CounterClockWise.

Я не могу установить начальный и конечный угол для этого, тогда как по часовой стрелке: NO.

Спасибо.

+0

Вы пытались только начать с M_PI_2 и кончить M_PI_2 + M_PI? –

+0

Да, я сделал, бесполезно. его приближение не совсем противоположно. –

+0

Что вы подразумеваете под «Я ** ** не могу ** установить угол начала и конца для этого, а по часовой стрелке: НЕТ« Не нарисовать половину круга? Он падает? что-то другое? – Avt

ответ

15

Вы должны извлечь из M_PI + M_PI_2 А потом вы установите strokeEnd в 1.0f

Проверка документации по координатам: http://i.stack.imgur.com/1yJo6.png

enter image description here

это немного сбивает с толку, но 0 не в верхней части круга

CGFloat startAngle = M_PI_2; 
CGFloat endAngle = startAngle + M_PI; 
CGFloat width = CGRectGetWidth(imageView.frame)/2.0f; 
CGFloat height = CGRectGetHeight(imageView.frame)/2.0f; 
CGPoint centerPoint = CGPointMake(width, height); 
float radius = CGRectGetWidth(imageView.frame)/2+10; 
CAShapeLayer* clockWiseLayer = [[CAShapeLayer alloc] init]; 
clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint 
                radius:radius 
               startAngle:startAngle 
                endAngle:endAngle 
                clockwise:YES].CGPath; 

clockWiseLayer.fillColor = [UIColor clearColor].CGColor; 
clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; 
clockWiseLayer.borderColor = [UIColor greenColor].CGColor; 
clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; 

clockWiseLayer.strokeStart = 0.0f; 
clockWiseLayer.strokeEnd = 1.0f; 

clockWiseLayer.lineWidth = 2.0f; 
clockWiseLayer.borderWidth = 5.0f; 
[self.layer addSublayer:clockWiseLayer]; 
+0

СОВЕРШЕННО. спасибо ....... –

+0

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

+0

Работает Хорошо ........ –

2

Вы начинаете с верхней части круга с -M_PI_2 и заканчиваются в M_PI + M_PI_2 (если вы хотите иметь полный круг и ограничить его с помощью strokeEnd, strokeStart). Затем установите путь круга, чтобы сделать из половины конца пути (левая сторона изображения), а не от начала до половины (справа от изображения)

CGFloat startAngle = -M_PI_2; 
CGFloat endAngle = M_PI + M_PI_2; 

clockWiseLayer.strokeStart = .5f; 
clockWiseLayer.strokeEnd = 1.0f; 
+0

. Благодарю. –

1

Я играл с bezierPathWithArcCenter и работает довольно странно, если clockwise = NO. Но если вы хотите, чтобы создать путь круг Безье с направлением conterclockwise вы можете создать путь по часовой стрелке, а затем вернуть его bezierPathByReversingPath

Новый объект путь с такой же формой пути, но для которых путь был создан в обратное направление.