Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 目标vc和源vc有什么区别?_Iphone_Ios_Xcode_Uiviewcontroller - Fatal编程技术网

Iphone 目标vc和源vc有什么区别?

Iphone 目标vc和源vc有什么区别?,iphone,ios,xcode,uiviewcontroller,Iphone,Ios,Xcode,Uiviewcontroller,我正在尝试学习如何执行自定义segue,这样我就可以拥有一个游戏菜单,当我在网上搜索时,似乎你必须创建一个自定义segue类,并覆盖-(void)perform,在该方法中,你必须指定一个虚构的目标vc和一个源vc。确定它的位置和材料。这是我在网上看到的代码之一 @implementation FromTopReplaceSegue -(void)perform{ UIViewController *dst = [self destinationViewController];

我正在尝试学习如何执行自定义segue,这样我就可以拥有一个游戏菜单,当我在网上搜索时,似乎你必须创建一个自定义segue类,并覆盖
-(void)perform
,在该方法中,你必须指定一个虚构的目标vc和一个源vc。确定它的位置和材料。这是我在网上看到的代码之一

@implementation FromTopReplaceSegue
-(void)perform{
    UIViewController *dst = [self destinationViewController];
    UIViewController *src = [self sourceViewController];
    [dst viewWillAppear:NO];
    [dst viewDidAppear:NO];


    [src.view addSubview:dst.view];

    CGRect original = dst.view.frame;

    dst.view.frame = CGRectMake(dst.view.frame.origin.x, 0-dst.view.frame.size.height, dst.view.frame.size.width, dst.view.frame.size.height);

    [UIView beginAnimations:nil context:nil];
    dst.view.frame = CGRectMake(original.origin.x, original.origin.y, original.size.height, original.size.width);
    [UIView commitAnimations];

    [self performSelector:@selector(animationDone:) withObject:dst afterDelay:0.2f];
}
- (void)animationDone:(id)vc{
    UIViewController *dst = (UIViewController*)vc;
    UINavigationController *nav = [[self sourceViewController] navigationController];
    [nav popViewControllerAnimated:NO];
    [nav pushViewController:dst animated:NO];

}
@end
我猜这应该是一个从上往下的序列。但是我有一些问题,比如,什么是源代码和目标vc,还有代码中提到的部分,代码是
dst.view.fram=CGRectMake(dst.view.frame.origin.x,0-dst.view.frame.size.height,

那里的0到底是什么,不应该是dst.view.frame.origin.y

好吧,不管怎么说,我把它连接起来,用一个按钮创建了一个按钮序列,但是当我这样做的时候,这个序列只从屏幕顶部向下3/4,底部1/4显示了我根视图的底部。而且,当我试着在新vc上按下一个按钮时,程序崩溃了


任何信息都会有帮助!

这是其中一个看起来没有完全解释的东西。从代码判断,“源视图控制器”是根视图控制器(或父视图控制器),“目标视图控制器”是DetailViewController(或子视图控制器)

不确定这是否会让您更困惑。无论如何,父/根视图控制器是主视图控制器,它处理子视图控制器的显示。我发现有趣的是,创建者将另一个类的视图子类化,而不是显示它

现在,y轴上的0-self.view.frame.size.height=-320。将主视图视为一张纸,将子视图视为第二张纸。想象一下将两张纸一张放在另一张上面(而不是放在上面)。屏幕将只显示底部的一张纸,直到您设置“上面的纸”的动画为止基本上,他计划从顶部而不是底部制作动画(我想我满足了自己的好奇心)