是否可以(根本没有)使用自定义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];
} `
正如你所说,这可能是我的头脑,但如果我得到一些指示,我会走几英里去做这项工作。它真的会让我的应用程序改头换面。非常感谢您花时间回答我的问题,一切顺利/安迪
答案 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];
}
}];