Анимация addSubview
У меня есть основной UIView, где я показываю разные данные. Затем я нажимаю кнопку, которая отображает subview следующим образом:
- (IBAction) buttonClicked:(id)sender
{
UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)];
UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(25,25,50,25)];
newLabel.text = @"some text";
[newView addSubview:newLabel];
[self.view addSubview:newView];
[newLabel release];
[newView release];
}
newView выглядит отлично, но он никоим образом не оживляет, он сразу появляется. Как добавить анимацию при появлении нового представления? Как масштабирование или слайд вниз или что-то в этом роде. Есть ли простой код?
Ответы
Ответ 1
Привет Вы можете использовать анимацию UIView:
[newView setFrame:CGRectMake( 0.0f, 480.0f, 320.0f, 480.0f)]; //notice this is OFF screen!
[UIView beginAnimations:@"animateTableView" context:nil];
[UIView setAnimationDuration:0.4];
[newView setFrame:CGRectMake( 0.0f, 0.0f, 320.0f, 480.0f)]; //notice this is ON screen!
[UIView commitAnimations];
Теперь SDK выберет это для вас и оживит представление к позициям, которые вы ему дали.
Это работает для большинства свойств UIViews: alpha, scale, bounds, frames и т.д.
В анимации также встроены флипы и завитки:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:newView
cache:YES];
[self.navigationController.view addSubview:settingsView.view];
[UIView commitAnimations];
Надеюсь, это поможет вам начать:)
Ответ 2
этот для рекомендуемого использования:
[UIView transitionWithView:containerView duration:0.5
options:UIViewAnimationOptionTransitionCurlUp //change to whatever animation you like
animations:^ { [containerView addSubview:subview]; }
completion:nil];
Ответ 3
ссылка на структуру QuarzCore
#import <QuartzCore/QuartzCore.h>
CATransition *transition = [CATransition animation];
transition.duration = 1.0;
transition.type = kCATransitionPush; //choose your animation
[newView.layer addAnimation:transition forKey:nil];
[self.view addSubview:newView];
Ответ 4
Я обнаружил, что даже с блоками анимации и опциями попытка анимации addSubview
сама по себе не сделает ничего для меня. Я нашел обходное решение, которое заключается в том, чтобы установить subview alpha в 0.0, добавить subview, а затем оживить настройку альфы от 0.0 до 1.0. Это дает мне постепенное исчезновение, которое я искал.
Надеюсь, это поможет кому-то еще.
UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
redView.backgroundColor = [UIColor redColor];
redView.alpha = 0.0;
[self.view addSubview:redView];
[UIView animateWithDuration:0.5 animations:^{
redView.alpha = 1.0;
}];
Ответ 5
Сделайте это быстрым.
var redView = UIView(frame:CGRectMake(20,20,100,100))
redView.backgroundColor = UIColor.redColor
redView.alpha = 0.0
view.addSubview(redView)
UIView.animateWithDuration(0.25) { () -> Void in
redView.alpha = 1.0
}
Добавление подвью не может быть анимировано, просто поместив его в блок animateWithDuration. И он не может быть анимирован с помощью скрытых.