Анимация 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. И он не может быть анимирован с помощью скрытых.