0

我正在使用 transitionFromView:toView:duration 在一个视图和另一个视图之间切换。

我的源视图以它的父视图为中心。我还想将目标视图居中(如下面的完成块中所做的那样)。

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

由于 transitionFromView:toView:duration 从它的 superview 中删除 sourceView 并用 destView 替换它,你不能简单地在调用之前运行 destView.center = destView.superview.center 。

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

4

2 回答 2

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;
}];
于 2013-10-10T20:47:18.553 回答
0

尝试在由于转换类方法调用从视图中删除而被释放之前存储对点的引用。

CGPoint* center = destView.superview.center;
[UIView transitionFromView:sourceView toView:destView duration:.3 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {
        destView.center = center;
}];
于 2013-10-11T13:02:10.573 回答