2014-07-02 1 views
0

J'affiche une nouvelle UIWindow et je veux qu'elle glisse à partir de la gauche et qu'elle glisse dans le côté gauche lorsqu'elle est fermée. Comment puis-je animer l'affichage et la suppression d'une UIWindow?UIWindow Animation de diapositives

Voici comment je montre actuellement mon nouvel UIWindow.

- (void)showMenu 
{ 

     CGRect screenRect = [[UIScreen mainScreen] bounds]; 
     CGFloat screenWidth = screenRect.size.width; 
     CGFloat screenHeight = screenRect.size.height; 

     UIButton *closeMenuButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [closeMenuButton setFrame:CGRectMake(250, 10, 50, 50)]; 
     [closeMenuButton setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal]; 
     [closeMenuButton addTarget:self action:@selector(closeMenu) forControlEvents:UIControlEventTouchUpInside]; 

     blurredView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight)]; 
     [blurredView setBarStyle:UIBarStyleBlack]; 

     MenuTableViewController *menu = [[MenuTableViewController alloc]initWithNibName:@"MenuTableViewController" bundle:nil]; 
     menu.view.frame = CGRectMake(0, 30, screenWidth, screenHeight - 50); 

     menuWindow = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 
     menuWindow.backgroundColor = [UIColor clearColor]; 
     menuWindow.windowLevel = UIWindowLevelStatusBar; 
     menuWindow.rootViewController = menu; 
     [menuWindow addSubview:blurredView]; 
     [blurredView addSubview:closeMenuButton]; 
     [blurredView addSubview:menu.view]; 
     [menuWindow makeKeyAndVisible]; 
    } 

Peut-être que cela?

menuWindow = [[UIWindow alloc]initWithFrame:CGRectMake(0, 0, 0, screenHeight)]; 
    menuWindow.backgroundColor = [UIColor clearColor]; 
    menuWindow.windowLevel = UIWindowLevelStatusBar; 
    menuWindow.rootViewController = menu; 
    [menuWindow addSubview:blurredView]; 
    [blurredView addSubview:closeMenuButton]; 
    [blurredView addSubview:menu.view]; 
    [menuWindow makeKeyAndVisible]; 

    [UIView animateWithDuration:0.5 animations:^{ 
    menuWindow.frame = screenRect; 
    blurredView.frame = screenRect; 
    menu.view.frame = CGRectMake(0, 30, screenWidth, screenHeight - 50); 
} 
       completion:^(BOOL finished) { 

       }]; 

Répondre

3

Vous pouvez animer un UIWindow comme tout autre point de vue (à l'aide UIView méthodes d'animation).

Quelques points à retenir. Vous devez conserver une fenêtre pour qu'il reste à l'écran. En outre, vous devez vous rappeler que les fenêtres vivent en coordonnées d'écran, pas en coordonnées de vue, donc vous devez prendre en considération l'orientation de l'interface actuelle avant de démarrer une animation.

Dans l'exemple ci-dessus, je vois que vous créez une fenêtre, ce qui en fait la clé et visible ... et nada. Vous devez conserver la fenêtre.

De même, vous utilisez l'API de manière incorrecte. Une fois que vous avez défini un contrôleur de vue racine, le framework est responsable de la vue. Vous l'ajoutez à nouveau en tant que subview, et cela peut gâcher des choses. Vous ne devriez pas ajouter directement des sous-vues à une fenêtre, il vous suffit de les ajouter à la hiérarchie de vues du contrôleur de vue et de laisser cela gérer cela.

+0

La fenêtre que je crée s'affiche très bien et fait exactement ce que je veux qu'elle fasse sauf animer du côté gauche de l'écran. – raginggoat

+0

Dans votre code, il n'y a pas d'animation. Postez le code de l'animation pour que je puisse y jeter un coup d'œil. –

+0

L'animation est ce que je ne suis pas sûr de savoir comment faire. – raginggoat

Questions connexes