2012-10-14 10 views

risposta

22

Si potrebbe utilizzare Core Animation per animare la posizione del livello vista. Se configuri l'animazione come additive, non dovrai preoccuparti di calcolare la nuova posizione assoluta, ma solo la modifica (posizione relativa).

CABasicAnimation *hover = [CABasicAnimation animationWithKeyPath:@"position"]; 
hover.additive = YES; // fromValue and toValue will be relative instead of absolute values 
hover.fromValue = [NSValue valueWithCGPoint:CGPointZero]; 
hover.toValue = [NSValue valueWithCGPoint:CGPointMake(0.0, -10.0)]; // y increases downwards on iOS 
hover.autoreverses = YES; // Animate back to normal afterwards 
hover.duration = 0.2; // The duration for one part of the animation (0.2 up and 0.2 down) 
hover.repeatCount = INFINITY; // The number of times the animation should repeat 
[myView.layer addAnimation:hover forKey:@"myHoverAnimation"]; 

Dal momento che questo sta usando Core Animation è necessario aggiungere QuartzCore.framework e #import <QuartzCore/QuartzCore.h> nel codice.

+0

Aww uomo questo ha funzionato molto meglio! Non solo è stato più facile da capire, ma ho potuto provare diversi valori che avevano un senso! Molte grazie!!! – Year3000

+0

Grazie, David. Mi hai salvato il tempo. Funziona bene. – Smita

0

Per tale compito, sarà meglio posizionare un'immagine in un sottolivello di UIView e quindi animare quella cornice di sottostrato. Questo tutorial potrebbe darvi qualche idea: http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

+0

Il tutorial si è collegato al non spiega come fare l'animazione. –

+0

Le operazioni sui livelli sono animate automaticamente. –

+0

Sì, hanno animazioni implicite se sono livelli standalone ma non si animano di nuovo ecc. –

5

Prova questa:

CGRect frm_up = imageView.frame; 
frm_up.origin.y -= 10; 

[UIView animateWithDuration:0.5 
    delay:0.0 
    options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeats 
    animations:^{ 
     imageView.frame = frm_up; 
    } 
    completion:NULL 
]; 
+0

Funziona benissimo! L'unica cosa è che si muove verso l'alto e verso sinistra. Diagonale come se stesse andando al segno di 0,0. – Year3000

+0

@ Year3000 come va? 1. Non sto facendo assolutamente nulla per la direzione X del fotogramma. 2. L'unica cosa che cambio è la posizione y, tuttavia dovrebbe essere autoreversa (vedi l'argomento 'options' della chiamata al metodo). Sono sicuro che ti manchi qualcosa. –

+0

IDK È strano. Il mio frame è (86, 198, 132, 217) e sto usando quello che mi hai consigliato ed è come il centro dell'immagine. – Year3000

7

Per Swift 3 e 4 Swift:

let hover = CABasicAnimation(keyPath: "position") 

hover.isAdditive = true 
hover.fromValue = NSValue(cgPoint: CGPoint.zero) 
hover.toValue = NSValue(cgPoint: CGPoint(x: 0.0, y: 100.0)) 
hover.autoreverses = true 
hover.duration = 2 
hover.repeatCount = Float.infinity 

myView.layer.add(hover, forKey: "myHoverAnimation") 
Problemi correlati