Хотите мерцающий UIImageView (CoreAnimation и альфа-значение) - PullRequest
0 голосов
/ 24 января 2010

Я хотел бы иметь UIImageView, который мерцает. Я думаю, я могу сделать это с 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...

И снова Это работает. Как я могу реализовать мерцание? Спасибо!

Ответы [ 5 ]

2 голосов
/ 24 января 2010

Проблема с вашим кодом в том, что метод [UIView commitAnimation] не блокируется - я имею в виду, что реализация кода продолжается, и анимация выполняется асинхронно. Итак, на самом деле, сначала вы проходите все итерации цикла, а затем выполняется анимация от 0,7 до 1,0 ...

Просто используйте setAnimationDidStopSelector без цикла «for».

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 голос
/ 24 января 2010

Вот еще один взгляд на это.Я не использую затухание, но думаю, что эффект мерцания все еще хорош.

http://github.com/st3fan/iphone-experiments/tree/master/Miscellaneous/Flicker/

1 голос
/ 24 января 2010

Еще две вещи:

Во-первых, UIViewAnimationCurveEaseIn не работает, я думаю, выцветает.

Во-вторых, в исходном коде вы говорите:

schwarz.alpha = 0,1;

Обратите внимание, что там есть запятая, а не точка. Интересно, что этот код компилируется, но, вероятно, он не делает то, что вы хотели.

1 голос
/ 24 января 2010

Все анимации 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]; 
}

Я использую это для анимации, уменьшая массив кнопок до их нормальных размеров.

0 голосов
/ 24 января 2010

Используйте первый отправленный пример кода, но выньте оператор for и добавьте строки

[UIView setAnimationRepeatAutoreverses:YES];
[UIView setAnimationRepeatCount:(float)number];

Я думаю, -1 для числа должно повторяться бесконечно, но я не уверен на 100% в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...