2011-07-28 32 views
11

Trong ứng dụng iPad, tôi muốn di chuyển lớp ngược chiều kim đồng hồ theo vòng cung có điểm trung tâm là (768, 512) và bán kính 512. Tôi muốn nó bắt đầu lúc 12 giờ (đó là góc trên bên phải của màn hình) và kết thúc lúc 6 giờ (góc dưới cùng bên phải).Gặp vấn đề khi hiểu về CGPathAddArc

Sau rất nhiều cố gắng-và-thất bại, Tôi đã nhận mã làm việc

CGPoint origin = logo.layer.position; 

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
pathAnimation.calculationMode = kCAAnimationPaced; 
pathAnimation.fillMode = kCAFillModeForwards; 
pathAnimation.removedOnCompletion = YES; 

CGMutablePathRef curvedPath = CGPathCreateMutable(); 
CGPathMoveToPoint(curvedPath, NULL, origin.x, origin.y); 
CGPathAddArc(curvedPath, NULL, 768, 512, 512, -M_PI_2, M_PI_2, YES); 
pathAnimation.path = curvedPath; 
CGPathRelease(curvedPath); 
pathAnimation.duration = 2; 
[logo.layer addAnimation:pathAnimation forKey:@"curve"]; 

Nhưng vấn đề là tôi không thể hiểu được những thông số góc và góc cuối bắt đầu. Tại sao tôi nên sử dụng -M_PI_2 và M_PI_2 tương ứng và đặt chiều kim đồng hồ thành CÓ?

Tôi nghĩ rằng tôi đang di chuyển các đối tượng từ 90 độ đến 270 độ chống chiều kim đồng hồ, do đó mã nên được
CGPathAddArc(curvedPath, NULL, 768, 512, 512, -M_PI_2, M_PI_2, YES);

Tôi có thể sai ở nhiều nơi và tình cờ nhận được kết quả chính xác.

Xin vui lòng sửa tôi và giúp tôi hiểu các thông số hai góc:

startAngle

The angle (in radians) from the horizontal that determines the starting point of the arc. 

endAngle

The angle (in radians) from the horizontal that determines the ending point of the arc. 

Cảm ơn

Leo

Trả lời

18

Vị trí của 0 là trên trục X, như sau:

3*PI/2 
     | 
PI ---|--- 0 
     | 
    PI/2 

-PI/2 tương đương với 3PI/2.

Bạn đang có hiệu quả bắt đầu quay tại cùng một vị trí (-PI/2, 3 * PI/2, 5 * PI/2, vv, tất cả đều bình đẳng)

"00:00" khi bạn nghĩ về nó là 3 * PI/2 hoặc -PI/2 ... và bạn đang xoay xuống "6 giờ" là PI/2

+1

trục y lộn ngược gây nhầm lẫn cho tôi. cũng, cảm ơn, nó đã giúp tôi :) – codrut

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