Witam Mam obraz, który chciałbym przesunąć w górę iw dół (Up 10 pikseli i 10 pikseli w dół), aby mój obraz wydawał się unosić. Jak to zrobić z prostą animacją, dzięki!Animacja UIImage w UIImageView Up & Down (tak jak się unosi) Loop
Odpowiedz
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.
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
Tutorial jesteś związana nie wyjaśnia, jak to zrobić animację. –
Operacje na warstwach są automatycznie animowane. –
Tak, mają niejawne animacje, jeśli są samodzielnymi warstwami, ale te nie animują z powrotem itp. –
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
];
Działa świetnie! Jedyną rzeczą jest to, że porusza się w górę iw lewo. Przekątna, jak w przypadku oznaczenia 0,0. – Year3000
@ 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. –
IDK To dziwne. Moja ramka to (86, 198, 132, 217) i używam tego, co poleciłeś, a to jest jak centrum obrazu. – Year3000
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")
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
Dziękuję David. Oszczędzasz mój czas. To działa dobrze. – Smita