2011-03-26 3 views
1

Tous,Mettre en œuvre un effet de glissement pour un UIView

J'essaie désespérément d'écrire une méthode qui anime l'ajout d'un sous-vue dans une sorte d'effet « glisser vers le haut », où les diapositives de vue sur l'écran d'un point particulier. Je peux obtenir un UIImageView pour travailler, mais j'ai du mal à l'appliquer à un UIPickerView. Ce qui se passe, c'est que l'UIPickerView ne bouge et ne s'anime que pour environ un quart de sa hauteur. Le UIImageView démarre vraiment avec une hauteur de 0 et glisse sur l'écran.

Voici mon code à ce jour:

 

+ (void) slideupView:(UIView*) view duration:(CGFloat) duration completion:(void (^)(BOOL 
            finished)) completion { 
    CGRect endBounds = view.bounds; 
    CGRect startBounds = endBounds; 

    startBounds.size.height = 0; 

    view.bounds = startBounds; 
    view.contentMode = UIViewContentModeTop; 
    view.clipsToBounds = YES; 
    view.layer.anchorPoint = CGPointMake(0.5, 1.0); 

    CGPoint pos = view.layer.position; 
    pos.y += (endBounds.size.height/2); 
    view.layer.position = pos; 

    [UIView animateWithDuration:duration delay:0.0   
       options:UIViewAnimationOptionAllowUserInteraction 
     animations:^{ 
      view.bounds = endBounds; 
     } 
     completion:completion]; 
} 
 

des choses que j'ai lu, il semble que l'approche encouragée consiste à utiliser le rectangle de bornes au lieu du cadre car l'approche du cadre ne fonctionne pas si vous avez modifié la transformation.

J'ai aussi lu que l'on ne peut pas changer la hauteur d'un UIPickerView, donc je me demande si c'est la raison de ce problème. Certes, je ne l'ai pas essayé sur une autre sous-classe UIView.

Des pensées? Est-ce qu'il y a une meilleure approche? Je veux juste animer une vue sur l'écran, similaire à présenter une vue de contrôleur de vue modale, sauf que je ne veux pas qu'il couvre tout l'écran. Je veux juste un effet de glissement vers le haut, comme quand le clavier apparaît sur l'écran.

Merci! Justin

Répondre

2

Si vous voulez simplement faire glisser votre vue comme si le clavier se levait, vous pouvez le faire en changeant la coordonnée de votre vue par animation.

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f,460.0f,320.0f,260.0f)]; 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:[self view] cache:YES]; 
[view setFrame:CGRectMake(0.0f,200.0f,320.0f,260.0f)]; 
[UIView commitAnimations]; 
+0

Assez simple, bien que je me demande pourquoi ne pas utiliser la propriété view.frame? – tia

+0

Mais ce n'est pas aussi simple que d'animer le cadre, puisque je veux commencer l'animation à partir d'un point arbitraire de l'écran, pas seulement de l'extérieur de l'écran. –

+0

oui ce n'est pas une tâche facile d'ajouter une animation de vue d'un point particulier sur l'écran, il peut être possible par un truc que vous pouvez utiliser une image pour masquer votre animation à ce moment mais cela dépend de votre vue d'écran complète. – saadnib

0

« Bounds » fait référence au système de coordonnées interne de la vue elle-même, alors que « cadre » et « centre » font référence à la position de la vue dans le système de coordonnées de son parent. Donc, pour faire glisser une vue sur l'écran, vous voudrez animer soit le cadre ou le centre.

Questions connexes