Я хочу прошить UIImageview на iPad, как мне это сделать? - PullRequest
9 голосов
/ 18 февраля 2011

Я хочу, чтобы UIImageView мигал несколько раз.

В настоящее время я не знаю, как это сделать.

Фактический код:

-(void)arrowsAnimate{
    [UIView animateWithDuration:1.0 animations:^{
        arrow1.alpha = 1.0;
        arrow2.alpha = 1.0;
        arrow3.alpha = 1.0;
        NSLog(@"alpha 1");
    } completion:^(BOOL finished){        

        [self arrowsAnimate2];

    }];
}

-(void)arrowsAnimate2{
    [UIView animateWithDuration:1.0 animations:^{
         arrow1.alpha = 0.0;
         arrow2.alpha = 0.0;
         arrow3.alpha = 0.0;
         NSLog(@"alpha 0");
    } completion:^(BOOL finished){;}];
}

позже я называю это так:

* * 1010

Это дает мне 10х альфа 1, а затем 10х альфа 0. В середине мы видим только одну анимацию. Есть предложения?

Спасибо.

Ответы [ 4 ]

20 голосов
/ 20 апреля 2011

Существует более простой способ создания анимации с использованием только 1 блока анимации:

aview.alpha = 1.0f;
[UIView animateWithDuration:0.5f
                      delay:0.0f 
                    options:UIViewAnimationOptionAutoreverse
                 animations:^ {
       [UIView setAnimationRepeatCount:10.0f/2.0f];
       aview.alpha = 0.0f;
} completion:^(BOOL finished) { 
       [aview removeFromSuperview]; 
}];    

Хитрость заключается в использовании [UIView setAnimationRepeatCount:NTIMES/2]; *_inside_* your animation block.Нет необходимости в дополнительных функциях или дополнительных циклах.

3 голосов
/ 18 февраля 2011

Используйте

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

и передайте UIViewAnimationOptionRepeat и, вероятно, UIViewAnimationOptionAutoreverse в ваших вариантах.Вам не нужно предоставлять блок завершения и выполнять только первую анимацию.

Редактировать: вот пример кода для изображения, которое исчезает и исчезает бесконечно.

[UIView animateWithDuration:1.0 
                      delay:0.0 
                    options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) 
                 animations:^{
                     self.myImageView.alpha = 1.0;
                 }
                 completion:NULL];

Редактировать2: я вижу, что Вы должны только перепрошить это только 10 раз.Я не смог сделать это с блоками на самом деле.Когда выполнялся блок завершения, анимация, казалось, мгновенно завершала оставшиеся 9 раз.Однако я смог довольно легко сделать это только с помощью анимации старого стиля.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:10.0];
[UIView setAnimationRepeatAutoreverses:YES];

self.myImageView.alpha = 1.0;

[UIView commitAnimations];

Редактировать 3: Я нашел способ сделать это с блоками.

- (void)animate
{
    if (self.animationCount < 10)
    {
        [UIView animateWithDuration:1.0 
                         animations:^{
                             self.myImageView.alpha = 1.0;
                         }
                         completion:^(BOOL finished){
                             [self animateBack];
                         }];
    }
}

- (void)animateBack
{
    [UIView animateWithDuration:1.0 
                     animations:^{
                         self.myImageView.alpha = 0.0;
                     }
                     completion:^(BOOL finished){
                         self.animationCount++;
                         [self animate];
                     }];
}
1 голос
/ 20 июля 2015

Мигание выше может не работать, когда ваше приложение переходит в фоновый режим и на передний план во время мигания. Вместо этого вы можете взять прозрачное изображение и ваше реальное изображение и анимировать ваш ImageView

UIImageView *imageview=[UIImageView new];
imageview.animationDuration=1;
imageview.animationImages = your array of images;
[imageview startAnimating];
0 голосов
/ 18 февраля 2011

Вам нужно дождаться завершения анимации, прежде чем запускать новую.Вы можете связать свой блок завершения в animate2, чтобы вернуться к animate, и остановиться на основе свойства counter, реализуя свой цикл в блоках animate / creation вместо отдельного цикла.

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