Бих искал да имам UIImageView, който трепти. Аз thougt мога да го направя с CoreAnimation и алфа-стойност. Опитах това:
for (int a = 1; a <= 100; a++) {
schwarz.alpha = 0.7;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1];
schwarz.alpha = 0,1;
[UIView commitAnimations];
}
но това не върши работа. Той просто се движи до 0,1, а не отново до 0,7. Опитах и това:
schwarz.alpha = 0.7;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1];
schwarz.alpha = 0.1;
[UIView commitAnimations];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1];
schwarz.alpha = 1;
[UIView commitAnimations];
[UIView commitAnimations];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1];
schwarz.alpha = 3;
[UIView commitAnimations];
// and so on...
И отново го прави работа. Как мога да реализирам трептенето? Благодаря!
Отговори:
2 за отговор № 1Проблемът с кода е, че [UIViewcommitAnimation] методът не блокира - искам да кажа, че изпълнението на кода продължава и анимацията се извършва асинхронно. Така че, всъщност, това, което се случва, е, че първо преминавате през всички циклични итерации, а след това анимацията се извършва от 0.7 до 1.0 ...
Просто използвайте setAnimationDidStopSelector без цикъла "за".
schwarz.alpha = 0.7;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
schwarz.alpha = 0.1;
[UIView commitAnimations];
Методът на улов може да бъде:
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
/* Do your things here... */ }
1 за отговор № 2
Всички UIView анимации, добавени в един цикъл от събития, са основно сливани. Трябва да използвате UIView animationDidStopSelector. Например, вижте следното:
-(void)tileAnimate:(NSString*)animationID finished:(BOOL)finished context:(void*)context {
int position = [animationID intValue];
NSString *next = [NSString stringWithFormat:@"%d", position+1];
if(position == boardSize) {
return;
}
[UIView beginAnimations:next context:context];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:timing];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(tileAnimate:finished:context:)];
buttons[position].transform = CGAffineTransformIdentity;
[UIView commitAnimations];
}
Използвам това, един след друг, анимирам свиването на масив от бутони обратно към нормалните им размери.
1 за отговор № 3
Още две неща:
На първо място, UIViewAnimationCurveEaseIn
не работи избледняване мисля.
Второ, в оригиналния код казвате:
schwarz.alpha = 0,1;
Имайте предвид, че там има запетая, а не точка. Интересното е, че кодът се компилира, но вероятно не прави това, което сте възнамерявали.
1 за отговор № 4
Ето още един пример за това. Аз не използвам избледняване, но мисля, че трептящият ефект е все още хубав.
http://github.com/st3fan/iphone-experiments/tree/master/Miscellaneous/Flicker/
0 за отговор № 5
Използвайте първия публикуван код, но вземете for
и добавете редовете
[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationRepeatCount:(float)number];
Мисля, че -1 за броя трябва да се повтаря за неопределено време, но аз не съм 100% сигурен в това.