2012-10-14 5 views

Odpowiedz

22

można użyć Core Animation animować położenie warstwy widoki. Jeśli skonfigurujesz animację na additive, nie będziesz musiał zawracać sobie głowy obliczaniem nowej pozycji absolutnej, tylko zmianą (pozycja względna).

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"]; 

Ponieważ używa Core Animation trzeba będzie dodać QuartzCore.framework i #import <QuartzCore/QuartzCore.h> w kodzie.

+0

Aww człowiek to działa lepiej! Nie tylko było to łatwiejsze do zrozumienia, ale mogłem wypróbować różne wartości, które miały sens! Wielkie dzięki!!! – Year3000

+0

Dziękuję David. Oszczędzasz mój czas. To działa dobrze. – Smita

0

Do tego zadania lepiej będzie umieścić obraz w podwarstwach z UIView, a następnie animować tę ramkę podwarstwy. Ten poradnik może dać pewne wyobrażenie: http://www.raywenderlich.com/2502/introduction-to-calayers-tutorial

+0

Tutorial jesteś związana nie wyjaśnia, jak to zrobić animację. –

+0

Operacje na warstwach są automatycznie animowane. –

+0

Tak, mają niejawne animacje, jeśli są samodzielnymi warstwami, ale te nie animują z powrotem itp. –

5

Spróbuj tego:

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

Działa świetnie! Jedyną rzeczą jest to, że porusza się w górę iw lewo. Przekątna, jak w przypadku oznaczenia 0,0. – Year3000

+0

@ Year3000 jak to jest? 1. Nie robię absolutnie niczego w kierunku X ramy. 2. Zmieniam tylko pozycję y, jednak powinna ona być autoodsyłana (patrz argument "options" wywołania metody). Jestem pewien, że czegoś brakuje. –

+0

IDK To dziwne. Moja ramka to (86, 198, 132, 217) i używam tego, co poleciłeś, a to jest jak centrum obrazu. – Year3000

7

Dla Swift Swift 3 i 4:

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") 
Powiązane problemy