2009-09-14 27 views

Trả lời

2

Nếu bạn có nghĩa là, "Làm thế nào để bạn thực hiện một hình ảnh theo một quỹ đạo tròn", sau đó giả sẽ là:

image.x = circleCentre.x + cos(angle) * circleRadius; 
image.y = circleCentre.y + sin(angle) * circleRadius; 
angle += 5; 
1

This question yêu cầu điều tương tự, mặc dù nói cách khác nhau. Các câu trả lời trong câu hỏi đó, cũng như trong this question nên cung cấp một cách để tạo hiệu ứng cho một UIView (UIImageView đơn giản chỉ là một phân lớp của điều này) về trung tâm của nó cho 360 độ trở lên.

+0

Có lẽ bạn đã nhầm lẫn về luân chuyển và cách mạng. Câu hỏi trên là về cuộc cách mạng. – Biranchi

28

Bạn có thể xoay chế độ xem, theo một số radian, bất kể số đó là nhỏ hơn vòng quay đầy đủ hoặc nhiều bội số của vòng quay đầy đủ mà không phải chia vòng xoay thành từng phần. Ví dụ: mã sau sẽ quay một chế độ xem, một lần mỗi giây, trong một số giây được chỉ định. Bạn có thể dễ dàng sửa đổi nó để quay một chế độ xem theo một số lần quay nhất định hoặc bằng một số radian.

- (void) runSpinAnimationWithDuration:(CGFloat) duration; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

    [myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
+0

Tôi gặp lỗi, "xoay vòng không khai báo" – abhinav

+3

phép quay là một const. Thay thế nó bằng số lần bạn muốn chế độ xem xoay trong khoảng thời gian. – mahboudz

3

dựa trên câu trả lời mahboudz, bạn có thể thiết lập nó để quay vô hạn bằng cách thiết lập:
rotationAnimation.repeatCount = HUGE_VALF;

1

Tạo hình ảnh động

- (CABasicAnimation *)spinAnimationWithDuration:(CGFloat)duration clockwise:(BOOL)clockwise repeat:(BOOL)repeats 
{ 
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    anim.toValue = clockwise ? @(M_PI * 2.0) : @(M_PI * -2.0); 
    anim.duration = duration; 
    anim.cumulative = YES; 
    anim.repeatCount = repeats ? CGFLOAT_MAX : 0; 
    return anim; 
} 

Thêm nó vào một cái nhìn

CABasicAnimation *animation = [self spinAnimationWithDuration:1.0 clockwise:YES repeat:YES]; 
[self.spinningView.layer addAnimation:animation forKey:@"rotationAnimation"]; 

Câu trả lời này khác nhau như thế nào từ câu trả lời của @ mahboudz? Bạn sẽ có mã sạch hơn nếu hầu hết các hàm của bạn trả về các đối tượng thay vì chỉ thao tác một số đối tượng ở đây và ở đó.

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