我是目标C的新手,我正在努力通过做一些教程来加快速度。我现在正在使用来自Ciechan / BCGenieEffect的精灵效果。我想我理解它的实现,因为它似乎对我有用,但我有一个问题,我怎么能在动画结束后触发一个segue。
我使用的代码如下:
- (void) genieToRect: (CGRect)rect edge: (BCRectEdge) edge
{
NSTimeInterval duration = 0.97;
CGRect endRect = CGRectInset(rect, 5.0, 5.0);
[self.buttons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) {
button.enabled = NO;
}];
if (self.viewIsIn) {
[self.draggedView genieOutTransitionWithDuration:duration startRect:endRect startEdge:edge completion:^{
self.draggedView.userInteractionEnabled = YES;
[self.buttons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) {
button.enabled = YES;
}];
}];
} else {
self.draggedView.userInteractionEnabled = NO;
[self.draggedView genieInTransitionWithDuration:duration destinationRect:endRect destinationEdge:edge completion:
^{
[self.buttons enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL *stop) {
button.enabled = YES;
}];}];
}
self.viewIsIn = ! self.viewIsIn;
}
我按下一个按钮来调用动画:
- (IBAction)leftButtonTapped:(UIButton *)sender
{
[self genieToRect:sender.frame edge:BCRectEdgeTop];
}
那里的一切都很好,但现在,我希望,当动画结束时,调用一个segue移动到下一个视图(就像Apple在点击垃圾邮件后在邮件中一样 - 一旦邮件到达垃圾,观点改变)
我试图在按钮方法中调用一个方法,如下所示:
[leftButton addTarget:self action:@selector(prepareForSegue:sender:) forControlEvents:UIControlEventTouchUpInside];
然后我添加了这样的方法:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[self performSegueWithIdentifier:@"public" sender:self];
}
不幸的是,它不起作用......
提前感谢您的帮助。
答案 0 :(得分:0)
performSegueWithIdentifier:sender
会致电prepareForSegue:identifier
。如果你有事可做(比如将信息传递到segue末尾的下一个ViewController),你可以将代码放在prepareForSegue:identifier
。
因此,请移除performSegueWithIdentifier:sender
中的prepareForSegue:identifier
。
要在动画后执行segue,请将其放入块中。在这里,您有...completion:^{}
。你把你要完成的事情放在那里。请拨打performSegueWithIdentifier:sender
。