开发者

iOS Slide an UIView (Menu) from a side in another View

开发者 https://www.devze.com 2023-03-19 04:54 出处:网络
i want to slide in a menu from a side in a View after a buttonclick event. After another Buttonclick the menu should be slided out from the big View...

i want to slide in a menu from a side in a View after a buttonclick event. After another Buttonclick the menu should be slided out from the big View...

I experimented with CATransition but i can't solve this problem...

CATransition *animation = [CATransition animation];
[animation setDuration:1];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromBottom];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]] ;

[[menuView layer] addAnimation:animation forKey:@"@asdf"];        
[menuView setCenter:CGPointMake([menuView center].x, [menuView center].y + 450)];
开发者_JAVA技巧

it work a bit, but i did not understand why.. :-/


If you want to implement it yourself one way you can go about it is create a custom view and add a button click event for a button in your view controller.

Also create a boolean variable to identify whether your custom view is visible or not.

On click, if menu view is not visible, then do this:

-(void)viewDidLoad
{
    ...

    // ---------------------------------------------
    // create the custom menu view off screen
    // ---------------------------------------------
    menuView = [[MenuView alloc] initWithFrame:CGRectMake(-320, 0, 320, 480)];
    menuView.alpha = 0; // hide it so it doesn't show at the start, only show when slide in

    [self.view addSubview:menuView];

    ...
}

-(void)toggleMenu
{
    if(menuIsVisible)
    {
        menuIsVisible = NO;

        [self hideMenu];
    }
    else
    {
        menuIsVisible = YES;

        [self showMenu];
    }
}

-(void)hideMenu
{
    [UIView animateWithDuration:0.5 animations:^{
        // note CGAffineTransforms doesn't use coordinates, they use offset
        // so an offset of (0,0) would bring the menuView back to the coordinate
        // when it was first instantiated, in our case, (-320, 0).
        menuView.transform = CGAffineTransformMakeTranslation(0,0);
    } completion:^{
        // hide the menu
        menuView.alpha = 0;
    }];
}

-(void)showMenu
{
    // show the menu
    menuView.alpha = 1;

    [UIView animateWithDuration:0.5 animations:^{
        // note CGAffineTransforms doesn't use coordinates, they use offset
        // so an offset of (320,0) from coordinate (-320,0) would slide the
        // menuView out into view
        menuView.transform = CGAffineTransformMakeTranslation(320,0);
    }];
}


A Controller like ViewDeck will enable you to do that.

Edit: I'm not sure what else to add to this, moderator. It's open source code that will add a menu that is controlled by a button which will slide in when clicked and slide out when clicked again, similar to what Facebook and Path have. You're also gaining the touch events with slide.

There's an example of how to use it on the github page here: https://github.com/Inferis/ViewDeck#how-to-use-it and also several examples projects available in the source code.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号