2010-11-12 17 views
0

Je voulais utiliser des animations pour charger une vue depuis le bas de la fenêtre, je sais que cela peut être fait via presentmodalViewController mais selon l'exigence de mon application, elle n'est pas valide comme je veux seulement charger la vue à la moitié de la fenêtre. Donc, je l'ai utilisé Animations et Heres un oeil à ce que je l'ai faitChargement d'une vue depuis le bas de la fenêtre en utilisant des animations

-(void) displayPicker 
    { 
     UIButton *done = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [done setFrame:CGRectMake(197, 199, 103, 37)]; 
     [done setBackgroundImage:[UIImage imageNamed:@"button_0.png"] forState:UIControlStateNormal]; 
     [done setTitle:@"Done" forState:UIControlStateNormal]; 
     [done setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [done addTarget:self action:@selector(dismissView) forControlEvents:UIControlEventTouchUpInside]; 

     [pickerDisplayView addSubview:datePicker]; 
     [pickerDisplayView addSubview:done]; 

    //animating here 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.5]; 
     pickerDisplayView = [[UIView alloc]initWithFrame:CGRectMake(0, 185, 320, 275)]; 
     [self.view addSubview:pickerDisplayView]; 
     [UIView commitAnimations]; 

    } 

La vue appelée pickerDisplayView a deux composants appelés Picker et Button, mais le problème est que Picker ne fonctionne pas correctement et ni la vue (pickerDisplayView) chargement d'une manière douce.


@ Matt: J'ai suivi ur instructions et agirent comme u conseillé ici est ce que je l'ai fait

-(void) animationIn 
{ 
    CGPoint p = {x:0,y:185}; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    //pickerDisplayView = [[UIView alloc]initWithFrame:CGRectMake(0, 185, 320, 275)]; 
    [pickerDisplayView setCenter:p]; 
    [UIView commitAnimations]; 

} 

Mais le prob est que la vue va en haut de la fenêtre et ne vient pas à l'axe y exact de 185. J'ai pris ces coordonnées de IB. S'il vous plaît aidez-moi monsieur

Répondre

0

Vous devez ajouter la vue offscreen puis l'animer dans.

// In your viewDidLoad or wherever you initialize the view. 
pickerDisplayView = [[UIView alloc]initWithFrame:offscreenRect]; 

[self.view addSubview:pickerDisplayView]; 
[self performSelector:@selector(animateIn) withObject:nil afterDelay:0.25]; 

// Declare animateIn 
- (void)animateIn 
{ 
    UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    [pickerDisplayView setCenter:onscreenPosition]; 
    [UIView commitAnimations]; 
} 

La valeur offscreenRect est un CGRect pour la taille et la position où vous voulez que la vue de commencer. onscreenPosition est un CGPoint pour la position où vous souhaitez que l'animation se termine. L'animation du centre de la vue est adéquate car vous ne voulez pas modifier la taille de la vue pendant l'animation.

Aussi, j'ai placé l'animation dans une méthode séparée qui est appelée avec -performSelector:withObject:afterDelay pour assurer que l'animation avec le feu. Parfois, vous ne verrez pas l'animation s'exécuter si vous la démarrez dans la même boucle d'exécution où vous avez ajouté la vue que vous animez.

+0

monsieur est-ce CGPoint ou CGPointMake – Radix

+0

Merci pour votre réponse, j'ai fait le travail. – Radix

0

Vous devez init et addSubview avant beginAnimations:. Lorsque vous le positionnez de sorte que le haut de celui-ci soit en ligne avec le bas de la vue d'ensemble. L'animation va ensuite glisser vers le haut pickerDisplayView. Idéalement, vous devez créer la vue dans une plume ou dans la méthode loadView. (Je recommande fortement d'utiliser des plumes sur 'loadView').

Faites ceci en loadview (ou passer à une pointe):

CGRect offScreenFrame = ?????; //Figure this out from self.view 
self.pickerDisplayView = [[UIView alloc]initWithFrame:offScreenFrame]; 
[self.view addSubview:self.pickerDisplayView]; 

C'est l'animation:

[UIView beginAnimations:nil context:NULL]; 
self.pickerDisplayView.frame = CGRectMake(0, 185, 320, 275); 
//[UIView setAnimationDuration:0.5]; //this line is probably not needed 
[UIView commitAnimations]; 

également des conseils que j'avais contre l'utilisation de 'nombres magiques' dans le cadre. Au lieu de cela, vous pouvez dériver le cadre pickerDisplayView du cadre superviews. Si vous utilisez des nombres «magiques», assurez-vous de les expliquer d'une manière ou d'une autre (c.-à-d. En les affectant à une variable nommément désignée ou à un commentaire).

+0

J'ai un viewController dans lequel j'ai fait l'objet du pickerDisplayView alors où dois-je l'init et en parlant de addSubview, Monsieur, je l'ai déjà fait dans le code lui-même. Même j'ai essayé la façon dont vous l'avez dit, mais pas de bons résultats Suis-je manquer quelque chose ?? – Radix