对于transitionFromView:toView:duration的动画启动回调

时间:2013-10-10 20:18:06

标签: iphone ios animation uiview

我使用transitionFromView:toView:duration在一个视图和另一个视图之间翻转。

我的源视图位于其父视图的中心。我还希望将目标视图居中(如下面的完成块中所做的那样)。

    [UIView transitionFromView:sourceView toView:destView duration:.3 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {
        destView.center = destView.superview.center;
    }];

由于transitionFromView:toView:duration从其超级视图中删除了sourceView并将其替换为destView,因此在调用之前不能简单地运行destView.center = destView.superview.center。

有没有办法在动画开始前运行居中代码?

2 个答案:

答案 0 :(得分:1)

尝试使用transitionWithView:duration:options:animations:效果相同:

self.destView.hidden = YES;
[self addSubview:self.destView];
destView.center = destView.superview.center;
// [self setNeedsLayout]; // I can't remember if this is necessary???

[UIView transitionWithView:self duration:0.3 options: UIViewAnimationOptionTransitionFlipFromLeft animations:^{

     self.destView.hidden = NO;
     self.sourceView.hidden = YES;

} completion:^(BOOL finished) {

     [self.sourceView removeFromSuperview]; 
     self.sourceView.hidden = NO;
}];

答案 1 :(得分:0)

尝试在解除分配之前存储对该点的引用,因为它是通过转换类方法调用从视图中删除的。

CGPoint* center = destView.superview.center;
[UIView transitionFromView:sourceView toView:destView duration:.3 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {
        destView.center = center;
}];