web-dev-qa-db-fra.com

animation addSubview

J'ai UIView principal où j'affiche différentes données. Ensuite, j'ai mis un bouton, qui affiche une sous-vue comme ceci:

- (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 semble bien, mais il ne s'anime pas du tout, il apparaît juste immédiatement. Comment puis-je ajouter une sorte d'animation lorsque newView apparaît? Comme zoomer ou glisser vers le bas ou quelque chose comme ça. Existe-t-il un code simple?

56
Mike

Salut Vous pouvez utiliser les animations 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];

Le SDK va maintenant comprendre cela et animer la vue aux positions que vous lui avez attribuées. Cela fonctionne pour la plupart des propriétés des UIViews: alpha, échelle, limites, cadres, etc.

Il existe également des animations intégrées comme flip et curl:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                           forView:newView
                            cache:YES];

[self.navigationController.view addSubview:settingsView.view];
[UIView commitAnimations];

J'espère que cela vous aidera à démarrer :)

79
RickiG
[UIView transitionWithView:containerView duration:0.5
        options:UIViewAnimationOptionTransitionCurlUp //change to whatever animation you like
        animations:^ { [containerView addSubview:subview]; }
        completion:nil];
83
adedoy

lien contre le framework 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]; 
23
Chakalaka

Faisons-le dans Swift.

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
}

L'ajout d'une sous-vue ne peut pas être animé en le plaçant simplement dans un bloc animateWithDuration. Et il ne peut pas être animé en utilisant caché.

20
Rob Norback

J'ai trouvé que même avec les blocs d'animation et les options, essayer d'animer addSubview seul ne ferait rien pour moi. J'ai trouvé une solution de contournement qui consiste à définir l'alpha de la sous-vue à 0,0, à ajouter la sous-vue, puis à animer le paramètre de l'alpha de 0,0 à 1,0. Cela me donne l'effet de fondu que je cherchais.

J'espère que ceci aide quelqu'un d'autre.

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;
}];
20
Kyle Clegg