9
votes

Comment puis-je présenter un uIView du bas de l'écran comme une fiche uactionnelle?

J'aimerais que UIView soit glisser du bas de l'écran (et restez mi-écran) comme une feuille d'emploi. Comment puis-je accomplir cela?

mise à jour: J'utilise le code suivant: xxx

La vue semble être animée dans le coin et apparaître dans le coin. Comment puis-je le faire glisser du fond? Se rapprocher!


2 commentaires

message mis à jour avec du code qui devrait aider


Un autre bon exemple: GITUB.COM/Homeyer/customuiagsheet


5 Réponses :


1
votes

Vous devrez déplacer vous-même la vue vous-même, en définissant son Center code> ou image code>. Je vous laisserai savoir quoi définir ceux-ci. Mais pour l'animation:

// set the view to its initial position here...

[UIView beginAnimations:nil context:NULL];
// move the view into place here...
[UIView commitAnimations];


1 commentaires

Merci pour le conseil! Je suis presque là. J'ai modifié mon message pour montrer mon code. Ça ne glisse pas exactement.



4
votes

Une manière d'utiliser le contrôleur de visualisation modal actuel sur le contrôleur d'affichage:

PresentModalViewController: (UIViewController *) modalviewController animé: (bool) animé

pour Plus d'infos Jetez un coup d'oeil à la Documentation UIVIEWCONTROLLER .

EDIT : Si vous voulez une vue à l'écran de mi-écran Il faut l'animer en position que @jtbandes a souligné. Je suggère également d'ajouter des bonbons au bloc d'animation UIView: xxx

Vous pouvez ensuite la déplacer à nouveau si vous devez aller à l'écran complet ou le rejeter. >


3 commentaires

Je veux que cela se comporte aussi comme une feuille d'uction, en montrant la vue mi-écran.


Merci pour le conseil! Je suis presque là. J'ai modifié mon message pour montrer mon code. Ça ne glisse pas exactement.


Que diriez-vous d'une vue comme l'application UPS gratuite? C'est comme une vue sur le centre de notification que l'utilisateur peut glisser / glisser et peut même réglementer jusqu'au bout de la vue de la vue sur l'autre vue.



5
votes

Faites ce que Matt a fait ici, mais changez simplement les valeurs et la direction. J'ai un code à la maison pour le faire à partir du bas si vous en avez besoin plus tard (je mettrai à jour ce message).

link: http://cocoawithlove.com/2009/05/intercepting-status-bar-touches-on.html p>

aussi N'oubliez pas de sortir le bit du code qui déplace la vue principale vers le bas (donc l'UIVoir l'UIVIEW apparaît simplement sur le dessus comme une feuille d'action) P>

mise à jour avec le code: strong>

C'est ce que j'utilise dans l'une de mes applications pour afficher / masquer une petite vue "Options": P>

- (void)toggleOptions:(BOOL)ViewHidden
{
// this method opens/closes the player options view (which sets repeat interval, repeat & delay on/off)

if (ViewHidden == NO)
{
    // delay and move view out of superview
    CGRect optionsFrame = optionsController.view.frame;

    [UIView beginAnimations:nil context:nil];

    optionsFrame.origin.y += optionsFrame.size.height;
    optionsController.view.frame = optionsFrame;

    [UIView commitAnimations];

    [optionsController.view
     performSelector:@selector(removeFromSuperview)
     withObject:nil
     afterDelay:0.5];
    [optionsController
     performSelector:@selector(release)
     withObject:nil
     afterDelay:0.5];
    optionsController = nil;
}
else
{
    optionsController = [[PlayOptionsViewController alloc] init];

    //
    // Position the options at bottom of screen
    //
    CGRect optionsFrame = optionsController.view.frame;
    optionsFrame.origin.x = 0;
    optionsFrame.size.width = 320;
    optionsFrame.origin.y = 423;

    //
    // For the animation, move the view up by its own height.
    //
    optionsFrame.origin.y += optionsFrame.size.height;

    optionsController.view.frame = optionsFrame;
    [window addSubview:optionsController.view];

    [UIView beginAnimations:nil context:nil];

    optionsFrame.origin.y -= optionsFrame.size.height;
    optionsController.view.frame = optionsFrame;

    [UIView commitAnimations];
}
}


2 commentaires

J'aime ta solution. Y a-t-il un moyen d'arrêter l'utilisateur d'interagir avec la vue derrière cette popup?


Un moyen simple serait de simplement désactiver l'interaction utilisateur (I.e. [SetUserPinterActionActionAcéder: Non]; ) de cette vue. Un meilleur moyen serait de montrer une autre vue avec une sorte de gradient semi-transparent avec interaction utilisateur désactivée et alors anime votre nouvelle vue. De cette façon, cela a du sens pour l'utilisateur que, étant donné que l'autre vue est quelque peu atténuée, qu'ils ne peuvent plus interagir avec elle. Sinon, ils pourraient penser que quelque chose est cassé. Pensez simplement à la façon dont une UIALERTERVIEWS cela. Lorsque vous avez terminé, supprimez simplement les deux vues



0
votes

Consultez ce message: HTTP : //blog.yetanotherJosh.com/post/33685102199/3-ways-a-do-a-vertical-Transition-with

Je vais avec l'approche de la fenêtre modale.


1 commentaires

Notez que Les réponses de liaison seules sont découragées , afin que les réponses devraient être le point final d'une recherche pour une solution (contre une autre halte de références, qui tendent à être obsolète au fil du temps). Veuillez envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence.



0
votes

Essayez cette solution ... Ça fonctionne

#pragma mark - Date Selector View PresentModelView with Transparent ViewController

- (void) showModal:(UIView*) modalView {

   CGRect  rect=modalView.frame;
   rect.origin=CGPointMake(0, 0);
   self.tutorialView.frame=rect;

    UIWindow *mainWindow = [(AppDelegate *)[UIApplication sharedApplication].delegate window];

    CGPoint middleCenter;


    middleCenter = CGPointMake(modalView.center.x, modalView.center.y);

    CGSize offSize = [UIScreen mainScreen].bounds.size;

    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    modalView.center = offScreenCenter;

    if ([[mainWindow subviews] containsObject:modalView]) {
        [modalView removeFromSuperview];
    }

    [mainWindow addSubview:modalView];

    [mainWindow bringSubviewToFront:modalView];
    // Show it with a transition effect
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    // animation duration in seconds
    modalView.center = middleCenter;
    [UIView commitAnimations];

}

// Use this to slide the semi-modal view back down.
- (void) hideModal:(UIView*) modalView {

    CGSize offSize = [UIScreen mainScreen].bounds.size;
    CGPoint offScreenCenter = CGPointMake(offSize.width / 2.0, offSize.height * 1.5);
    [UIView beginAnimations:nil context:(__bridge void *)(modalView)];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hideModalEnded:finished:context:)];
    modalView.center = offScreenCenter;
    [UIView commitAnimations];

}

- (void) hideModalEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

    UIView *modalView = (__bridge UIView *)context;
    [modalView removeFromSuperview];
}


0 commentaires