使用自定义Transition加载XIB?

时间:2011-05-29 19:15:10

标签: iphone objective-c uianimation

是否可以(根本没有)使用自定义AnimationTransition加载XIB?

我所做的是创建一个“覆盖”屏幕的动画,我想要的是在动画完成播放后,我希望它能够显示新的XIB。

我似乎无法找到任何适当的解决方案......任何想法?

更清楚:按下按钮 - >播放动画(封面屏幕) - >加载XIB。


再次问好!是的,你描述的最后一种方式是我这样做的方式。我有两个UIViews(可能已经存在错误),它们在每一侧都有出界,(如x.-160.y.0和x.320y.0)

-(IBAction) leftDoor{

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    closeDoor1.center = CGPointMake( closeDoor1.center.x +160, closeDoor1.center.y);


    [UIView commitAnimations];

 } 


-(IBAction) rightDoor{

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    closeDoor2.center = CGPointMake( closeDoor2.center.x -160, closeDoor2.center.y);

    [UIView commitAnimations];
}

所以,我要做的不是“拆分”当前视图然后打开一个新的XIB,我正在搜索的效果是一个“关门”效果,这就是我使用UIView的原因(我以为我放置了)这些图形就像两个ImageViews一样。然后,加载新的XIB ...这是我真的很困惑的地方。我尝试这个的第一种方法是制作三个IBAction,包括我上面提到的两个,然后将所有三个(多个动作)应用到一个按钮。因此,对于切换视图,我做了类似这样的事情:` - (IBAction)newViewDisplay:(id)sender {

theView *newViewController = [[theView alloc]
                                      initWithNibName:@"theView" bundle:nil]; 

[self.view addSubview:newViewController.view];

} `

正如你所说,这可能是我的头脑,但如果我得到一些指示,我会走几英里去做这项工作。它真的会让我的应用程序改头换面。非常感谢您花时间回答我的问题,一切顺利/安迪

1 个答案:

答案 0 :(得分:2)

你在屏幕上用什么来覆盖?

以这种方式思考,(听起来)你有2个视图,旧视图和存储在此xib中的新视图。动画是次要的。

您需要加载新视图,然后显示它(可以在屏幕外),然后将其动画(移动它)到您想要的位置。如果你想把它分成两个部分,一个在底部,一个在屏幕的顶部,然后在中间相遇,我认为这既复杂又高于你的技能水平。 (这里没有意思)。

如果您正在尝试按照描述进行分割动画,则可以完成,但您需要“假装”。它将涉及拍摄“截图”(分类),分割它,移动这两个图像以便它们与动画相遇,加载下面的视图,然后移除图像。棘手的东西。

你必须有这种动画吗?

如果您可以发布您拥有的代码,我可以重新安排它,并为您添加。

但是,你需要澄清你想要做什么。

更新3:我为自动反转添加了另一个选项。

//您可以将两个门添加到一个动画块中。

    //Create an animation block. Ease Out is better for this animation but you can change it.
[UIView animateWithDuration:1.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAutoreverse) animations:^{
    closeDoor1.center = CGPointMake( closeDoor1.center.x +160, closeDoor1.center.y);
    closeDoor2.center = CGPointMake( closeDoor2.center.x -160, closeDoor2.center.y);

}completion:^(BOOL finished){
    if (finished) {
            //When finished, create the VC if it doesn't exist, and insert it below the 'closed door'.

        if (newViewController == nil) {
            UIViewController *newViewController = [[UIViewController alloc] initWithNibName:@"theView" bundle:nil]; 
        }

        [self.view insertSubview:newViewController.view belowSubview: closeDoor2];;
        [self.closeDoor1 removeFromSuperview];
        [self.closeDoor2 removeFromSuperview];

    }
}];