2009-09-14 9 views

Odpowiedz

2

Jeśli masz na myśli „? Jak zrobić zdjęcie wykonaj kołową ścieżkę”, wtedy Pseudokod byłoby:

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

This question prosi o to samo, chociaż innymi słowy. Odpowiedzi w tym pytaniu, a także w this question powinny zapewnić sposób animowania UIView (UIImageView jest po prostu podklasą tego) o jego centrum dla 360 stopni lub więcej.

+0

Prawdopodobnie jesteście zdezorientowani obrotem i rewolucją. Powyższe pytanie dotyczy rewolucji. – Biranchi

28

Możesz obracać widok o pewną liczbę radianów, niezależnie od tego, czy jest to mniej niż pełny obrót, czy wiele wielokrotności pełnego obrotu, bez konieczności dzielenia obrotu na części. Przykład: poniższy kod przekręci widok raz na sekundę na określoną liczbę sekund. Możesz go łatwo zmodyfikować, aby obrócić widok o określoną liczbę obrotów lub o pewną liczbę radianów.

- (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

Otrzymuję błąd "rotacje niezadeklarowane" – abhinav

+3

obrót jest const. Zastąp ją tyle razy, ile razy chcesz obrócić widok w czasie. – mahboudz

3

na podstawie odpowiedzi mahboudz, można ustawić ją na nieskończenie spinu przez ustawienie:
rotationAnimation.repeatCount = HUGE_VALF;

1

Tworzenie animacji

- (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; 
} 

dodać go do widoku

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

Czym różni się ta odpowiedź z odpowiedzi @ mahboudz? Będziesz miał znacznie czystszy kod, jeśli większość twoich funkcji zwróci obiekty, zamiast tylko manipulować niektórymi obiektami tu i tam.