Попытка исчезнуть в UIView без успеха - PullRequest
19 голосов
/ 25 января 2010

Я пытаюсь исчезнуть в UIView как подпредставление моего основного вида. Размер UIView, который я пытаюсь представить, имеет размеры 320x55.

Я настраиваю вид и таймер;

secondView.frame = CGRectMake(0, 361, 320, 55);
secondView.alpha = 0.0;
[self.view addSubview:secondView];
[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(fadeView) userInfo:NO repeats:NO];

Таймер запускает следующий код:

secondView.alpha = 1.0;
CABasicAnimation *fadeInAnimation;
fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.duration = 1.5;
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
[fadeInAnimation setDelegate:self];
[secondView.layer addAnimation:fadeInAnimation forKey:@"animateOpacity"];

Мой secondView подключен в Интерфейсном Разработчике и отвечает на другие сообщения, но я не вижу ничего, что происходит на экране.

Может кто-нибудь помочь мне разобраться, что здесь происходит?

Спасибо, Рикки.


В ответ на следующую рекомендацию:

Я немного не уверен в этом. Первоначально я вставил этот код (потому что я вижу secondView как экземпляр UIView?):

[secondView beginAnimations:nil context:NULL]; 
[secondView setAnimationDuration:0.5]; 
[secondView setAlpha:1.0]; 
[secondView commitAnimations]; 

Затем я попробовал ваше предложение, которое не вызывало предупреждений или ошибок, но все равно ничего не выдает:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[secondView setAlpha:1.0]; 
[UIView commitAnimations]; 

Спасибо! Рики.


Ответы [ 4 ]

43 голосов
/ 25 января 2010

Вы должны быть в состоянии сделать это немного проще. Вы пробовали что-то подобное?

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[secondView setAlpha:1.0];
[UIView commitAnimations];
16 голосов
/ 24 апреля 2012

мне кажется, что одна вещь, которую вы упускаете, это то, что ваш взгляд уже может иметь альфа 1,0. перед вызовом анимации убедитесь, что альфа равен 0 (или как вы хотите).

Я предпочитаю использовать блочную анимацию для этого. он чище и более самодостаточен.

secondView.alpha = 0.0f;
[UIView animateWithDuration:1.5 animations:^() {
    secondView.alpha = 1.0f;
}];
11 голосов
/ 25 января 2010

Это не ответит на ваш вопрос, если вы настаиваете на использовании CoreAnimations, но для iPhoneOS гораздо проще использовать блоки анимации для анимации UIView.

secondView.alpha = 0.0f;
[UIView beginAnimations:@"fadeInSecondView" context:NULL];
[UIView setAnimationDuration:1.5];
secondView.alpha = 1.0f;
[UIView commitAnimations];

Кроме того, вы можете вызвать делегата в более позднее время с помощью

[self performSelector:@selector(fadeView) withObject:nil afterDelay:0.5];
8 голосов
/ 02 января 2014

Здесь также есть хорошая альтернатива с большим количеством опций и простой в использовании.

  [secondViewController.view setAlpha:0.0];
  [UIView animateWithDuration:1.5
          delay:0.0 
          options:UIViewAnimationOptionCurveEaseIn // See other options
          animations:^{
            [secondViewController.view setAlpha:1.0];
        } 
        completion:^(BOOL finished) {
        // Completion Block
        }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...