打开/关闭视图作为菜单

时间:2015-09-14 13:26:06

标签: ios objective-c iphone

我正在尝试打开和关闭视图源x = 55的视图(菜单)。 开放效果效果很好,但效果很接近: 效果从x = 0开始,我的视图位于x = 55 ...然后效果看起来很奇怪....

我的代码是:

    -(IBAction)menuClick:(id)sender {
    if(!self.viewMais) {
        CGRect screen = [[UIScreen mainScreen]bounds];
        self.viewMais = [[UIView alloc]initWithFrame:CGRectMake(55, 0, screen.size.width-55, screen.size.height)];
        [self.viewMais setBackgroundColor:[UIColor blackColor]];
        [self.view addSubview:self.viewMais];
        [self open];
    }
    else {
        [self close];
    }

}

    -(void)open {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;
    UIView *containerView = self.viewMais;
    [containerView.layer addAnimation:transition forKey:nil];
}

-(void)close {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromLeft;
    UIView *containerView = self.viewMais;
    [containerView.layer addAnimation:transition forKey:nil];
    [self performSelector:@selector(removerViewMais) withObject:nil afterDelay:0.3];
}

-(void) removerViewMais {
    [self.viewMais removeFromSuperview];
    self.viewMais = nil;
}

2 个答案:

答案 0 :(得分:1)

- (IBAction为)showPicker {

if (!isPickerShow) {

    [self.view endEditing:YES];
        [UIView animateWithDuration:0.3 animations:^{

            viewWithPicker.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height-viewWithPicker.frame.size.height, 320, 555);
            isPickerShow=YES;
        }];

}

}

- (IBAction为)hidePicker {

if (isPickerShow) {

    [UIView animateWithDuration:0.3 animations:^{

            viewWithPicker.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height , 320, 255);

            isPickerShow=NO;


    }];

}

}

答案 1 :(得分:0)

我在关闭菜单中使用以下代码解决了我的问题

-(void)close { 
CGRect destination = self.view.frame; 

[UIView animateWithDuration:0.25 animations:^{ 

self.viewMais.frame = CGRectMake(destination.size.width, self.viewMais.frame.origin.y, self.viewMais.frame.size.width, self.viewMais.frame.size.height); 

} completion:^(BOOL finished) { 
[self.viewMais setHidden:YES]; 
[self.viewMais removeFromSuperview]; 
self.viewMais = nil; 
}]; 
}