ios - 自定义 View 转换后屏幕变为空白

标签 ios

我正在学习如何实现自定义 View 转换。我想创建一个类似于 spotify 侧边菜单的幻灯片菜单。我正在使用 UIViewControllerAnimatedTransitioning .动画似乎正在工作,但在解除过渡后,屏幕变为空白。

这是呈现过渡的代码

#import "Transition.h"

@implementation Transition

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
return 1;
}

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{

UIViewController *to=[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController *from=[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

UIView *containerView=[transitionContext containerView];
to.view.alpha=0.0;


[containerView addSubview:to.view];
[containerView addSubview:from.view];

[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
    from.view.frame = CGRectMake(200, 0, from.view.frame.size.width, from.view.frame.size.height);
    from.view.alpha=1.0;
    to.view.alpha=1.0;
} completion:^(BOOL finished) {
    [transitionContext completeTransition:YES];
}];

}
@end

这是解雇过渡的代码
#import "DismissTransition.h"

@implementation DismissTransition

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
return 1;
}

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContex{

UIViewController *from=[transitionContex viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *to=[transitionContex viewControllerForKey:UITransitionContextToViewControllerKey];

UIView *containerView=[transitionContex containerView];


[UIView animateWithDuration:[self transitionDuration:transitionContex] animations:^{
    to.view.frame = CGRectMake(0, 0, from.view.frame.size.width, from.view.frame.size.height);
    to.view.alpha=1.0;
    from.view.alpha=0.0;
} completion:^(BOOL finished) {
    [transitionContex completeTransition:YES];
}];

}
@end

这是我的自定义转换被调用的地方
#import "ViewController.h"
#import "Transition.h"
#import "DismissTransition.h"
#import "MenuViewController.h"

@interface ViewController ()<UIViewControllerTransitioningDelegate>

@end

@implementation ViewController
- (IBAction)buttonTap:(id)sender {
UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MenuViewController* viewController = [mystoryboard  instantiateViewControllerWithIdentifier:@"MenuVC"];


viewController.modalPresentationStyle=UIModalPresentationCustom;
viewController.transitioningDelegate=self;

[self presentViewController:viewController animated:YES completion:nil];
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented
                                                              presentingController:(UIViewController *)presenting
                                                                  sourceController:(UIViewController *)source{

return [[Transition alloc]init];
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed{

return [[DismissTransition alloc]init];
}



@end

这就是我解雇 MenuViewController 的方式
#import "MenuViewController.h"

@interface MenuViewController ()

@end

@implementation MenuViewController
- (IBAction)doneButtonTap:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}



@end

最佳答案

您应该在 Dismiss Transition 中将 to.view 添加到容器 View

关于ios - 自定义 View 转换后屏幕变为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484034/

相关文章:

ios - NSUser默认一个键有多种数据类型

ios - AudioKit:使用 AKPlayer 循环注入(inject)静音/淡出的方法?

ios - Sprite Kit 不会停止添加节点

iphone - 相机叠加图片

iphone - 如何在 iPhone 上制作一个不完全覆盖底层屏幕的新屏幕

ios - 如何释放在另一个函数中创建的对象?

iOS 图表 moveViewToX 似乎不起作用

iphone - ASIHTTPRequest 在失去互联网连接后恢复请求

ios - 我应该如何在 xcode Storyboard中链接 View Controller ?

ios - 使用 Assets 目录中的静态图像作为启动图像 iOS 9