Ответ 1
Вы должны сделать это немного проще. Вы пробовали что-то вроде этого?
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[secondView setAlpha:1.0];
[UIView commitAnimations];
Я пытаюсь затухать в 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"];
Мой второй просмотр подключен в Interface Builder и отвечает на другие сообщения, но я ничего не вижу на экране.
Кто-нибудь может помочь мне выяснить, что происходит здесь?
Спасибо, Рики.
В ответ на следующую рекомендацию:
Я немного не уверен здесь. Первоначально я помещаю этот код в (потому что я вижу 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];
Спасибо! Рики.
Вы должны сделать это немного проще. Вы пробовали что-то вроде этого?
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[secondView setAlpha:1.0];
[UIView commitAnimations];
мне кажется, что одна вещь, которую вам не хватает, заключается в том, что у вашего представления может быть уже альфа 1.0. убедитесь, что альфа - 0 (или все, что вы хотите, чтобы оно было) до вызова анимации.
Я предпочитаю использовать для этого анимацию блока. он более чистый и более автономный.
secondView.alpha = 0.0f;
[UIView animateWithDuration:1.5 animations:^() {
secondView.alpha = 1.0f;
}];
Это не ответит на ваш вопрос, если вы настаиваете на использовании 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];
Здесь также есть хорошая альтернатива со многими опциями и проста в использовании.
[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
}];