2015-08-23 16 views
8

Tôi đã mã hóa dưới đây cho một nửa vòng kết nối trong iOS sử dụng UIBezierPathCAShapeLayer.góc bắt đầu và kết thúc của 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]; 

Kết quả này như sau.

enter image description here

Tôi muốn một nửa vòng tròn màu xanh này ở phía đối diện của Globe Thế giới.

Đó là một nửa Vòng kết nối, nhưng tôi muốn nó ở phía bên kia, cũng là CounterClockWise.

Tôi không thể đặt góc bắt đầu và kết thúc cho điều đó, trong khi theo chiều kim đồng hồ: NO.

Cảm ơn.

+0

Bạn đã thử chỉ mới bắt đầu từ M_PI_2 và kết thúc M_PI_2 + M_PI? –

+0

Có, tôi đã làm, không sử dụng. nó đến không hoàn toàn ngược lại. –

+0

Ý của bạn là gì bởi "Tôi ** không thể ** để đặt góc bắt đầu và kết thúc cho điều đó, trong khi chiều kim đồng hồ: KHÔNG" Nó không vẽ một nửa vòng tròn? Nó bị treo? thứ gì khác? – Avt

Trả lời

15

Bạn nên rút ra từ M_PI + M_PI_2 Và sau đó bạn thiết lập strokeEnd để 1.0f

Kiểm tra tài liệu cho tọa độ: http://i.stack.imgur.com/1yJo6.png

enter image description here

Đó là một chút bối rối nhưng 0 không phải là đỉnh vòng tròn

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

XONG. thanks ....... –

+0

Nếu tôi muốn di chuyển một vòng tròn từ trên xuống trên ngược chiều kim đồng hồ, thì góc bắt đầu và kết thúc là gì. Vui lòng giúp –

+0

Hoạt động tốt ........ –

2

Bạn bắt đầu từ đầu vòng kết nối với -M_PI_2 và kết thúc tại M_PI + M_PI_2 (nếu bạn muốn có vòng tròn đầy đủ và giới hạn nó bằng cách sử dụng strokeEnd, strokeStart). Sau đó thiết lập con đường vòng tròn để vẽ từ nửa cuối của con đường (phía bên trái của hình ảnh) thay vì từ đầu đến một nửa (phía bên phải của hình ảnh)

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

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

upvoted. cảm ơn. –

1

Tôi đã chơi với bezierPathWithArcCenter và hoạt động khá lạ nếu clockwise = NO. Nhưng nếu bạn muốn tạo ra một con đường vòng tròn Bút chì với hướng conterclockwise bạn có thể tạo ra một con đường chiều kim đồng hồ và sau đó trở lại nó với bezierPathByReversingPath

Một đối tượng con đường mới với cùng hình dạng con đường nhưng mà con đường đã được tạo ra trong hướng ngược lại.

Các vấn đề liên quan