Comment animer la largeur et la hauteur d'une UIView dans Xcode?
J'ai cette sous-vue je veux ajouter à ma vue principale, mais faire élargir à partir de l'origine. J'ai lu certains de la documentation d'Apple, mais je ne comprends pas d'où je fais erreur. Je peux animer l'origine de l'image, c'est à dire qu'il diapositive à partir de la mesure, mais la largeur/hauteur ne semble pas animer. Code comme suit:
[UIView beginAnimations:@"animateAddContentView" context:nil];
[UIView setAnimationDuration:0.4];
customView.frame= CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 0, 150);
[self.view addSubview:customView];
customView.frame= CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 310, 150);
[UIView commitAnimations];
J'ai aussi essayé de mettre seulement le setFrame participé à l'animation comme ceci:
customView.frame= CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 0, 150);
[self.view addSubview:customView];
[UIView beginAnimations:@"animateAddContentView" context:nil];
[UIView setAnimationDuration:0.4];
customView.frame= CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 310, 150);
[UIView commitAnimations];
Mais cela ne fonctionne toujours pas!
EDIT:
Que par les suggestions, j'ai déplacé dans un bloc de base de l'animation de la solution, et c'est le code exact:
NSLog(@"yourview : %@",customView);
customView.frame= CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 0, 150);
NSLog(@"yourview : %@",customView);
[self.view addSubview:customView];
NSLog(@"yourview : %@",customView);
// [customView setFrame:CGRectMake( 0.0f, 480.0f, customView.frame.size.width, customView.frame.size.height)];
[UIView animateWithDuration:0.4
delay:0
options:UIViewAnimationCurveEaseInOut
animations:^ {
NSLog(@"yourview : %@",customView);
customView.frame = CGRectMake(self.view.frame.origin.x +5, self.view.frame.origin.y +5, 310, 150);
NSLog(@"yourview : %@",customView);
}completion:^(BOOL finished) {
}];
Qui ne fonctionne toujours pas, pour une raison quelconque. Possibles problèmes que je rencontre sont:
- Je suis du chargement de cette customView à partir d'un
nib
qui est spécifiquement 310 150, c'est peut-être la cause du problème. - Je ne suis pas de l'importation de la correcte des cadres, mais depuis je ne peux animer l'image.l'origine des pièces de ce point de vue, je ne suis pas sûr que ce soit le cas...j'ai
QuartzCore
etCore Graphics
tous importés et d'autres choses.
À chaque point dans le journal qu'il est de donner les bonnes choses: par exemple, avant de l'image cible la taille est de 0, 150, et après j'ai mis le cadre de ses 310, 150. Mais l'animation ne fonctionne pas!
- Vous ne pouvez pas animer la hauteur ou la largeur de vue. Vous ne pouvez animer son origine. Si vous avez besoin d'un croissant effet, à l'échelle de la transformation est la seule façon de l'atteindre. La partie la plus délicate d'une transformation d'échelle, c'est qu'il pousse toujours à partir du centre, verticalement, horizontalement ou les deux. Donc, si vous voulez qu'il sorte de goutte de partir d'un point donné, vous aurez à faire un travail là-bas.
Vous devez vous connecter pour publier un commentaire.
Pour rendre une vue "grandir" en place, ne pas les animer l'image. Animer la transformation.
Charge de votre sous-vue de la plume. Définir sa transformation d'une échelle de 0:
Puis l'ajouter à votre superview.
À l'intérieur du bloc d'animation, jeu de la transformation de l'identité:
Et la vue grandir en taille normale. Vous devrez peut-être jouer avec le point d'ancrage pour la faire grandir à partir du point de droit.
Vous pouvez également modifier l'image dans le bloc, mais pour déplacer un point de vue seulement, je préfère changer le centre de la propriété, vous ne devriez pas essayer de définir le cadre si vous avez aussi une transformation.
Pour les points de bonus, vous pouvez également animer un légèrement plus grand que la 1.0 échelle, puis d'animer retour à l'identité transformer en chaîne, animation à partir de la fin du bloc. Cela rend la vue "pop" de l'écran comme une alerte de vue.
Essayez d'utiliser un bloc, il sera plus clair.
customView.backgroundColor = [UIColor redColor];
ou quelque chose.Essayez ceci:
Ou si vous souhaitez utiliser beginAnimation méthode au lieu de bloquer Methos , Utilisez ceci :
Voici une façon amusante de l'animation de votre point de vue. Dans mon exemple, j'ai une touche d'action qui s'exécute le bloc d'animations et un BOOL assurez-vous de réinitialiser les points de vue de retour à leur état d'origine.
D'abord vous mettre 2 UIViews sur un UIViewController (vous pouvez les colorier de couleurs différentes pour le contraste). Se connecter à votre "MainViewController.h" fichier que vous créez pour le contrôle de la grande vue.
L' .h fichier devrait ressembler à ceci:
et votre .m fichier devrait ressembler à ceci:
Donc, assurez-vous que le dessus a quelques petites dimensions, comme x:0,y:0, largeur:320 hauteur:43 et bottomView comme x:0 y:40 largeur:320 hauteur:528. N'oubliez pas de la couleur de l'arrière-fond de couleurs différentes. Ensuite, il suffit d'exécuter le programme et vous devriez voir des animations.
Pour moi je pense que l'une des plus importantes lignes dans le code est setFrame: qui me permet de le cadre de automatiquement reaffiche le rectangle sans avoir à utiliser la méthode DrawRect. La définition de la propriété change le point spécifié par le centre de la propriété et de la taille dans les limites du rectangle en conséquence.
Bien sûr, il ya d'autres façons amusantes à faire, mais j'espère que cela peut aider quelqu'un à faire iOS look magique, comme il est censé l'être! Heureux voyages!
Points importants
1) Ajouter une vue à votre parentView avant l'animation, avec l'image de départ.
2) Ensuite, il suffit de donner l'image cible à l'intérieur de bloc d'animation
Vous n'avez plus besoin de cela, car vous ajoutez de vue de la plume..
juste donner le code d'animation sur votre point de vue.. assurez-vous que yourView n'est pas nulle (me Semble que c'est le cas..)
NSLog(@"yourview : %@",yourView);
impressions?[self.view addSubview:customView];
Vous n'avez pas besoin de plus, puisque vous êtes l'ajout de points de vue dans la plume.Si votre viewcontrollers viewWillLayoutSubviews (ou ces) définit le "premier" cadre de yourView, alors que, apparemment, est appelée lors de l'animation du cycle, et donc de réinitialiser le cadre défini par l'animation.
Swift 4