我使用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。
有没有办法在动画开始前运行居中代码?
答案 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;
}];