像convertConstraintsToView:?

时间:2016-02-02 15:59:26

标签: ios autolayout

我尝试为view(视图层次结构中的任何位置)设置动画以变为全屏。 为此,我将view添加到UIWindow个实例。

P.S。我使用的是砌砖

// replacing superview
[[UIApplication sharedApplication].keyWindow addSubview:self];

// fullscreen constraints
[self remakeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.superview);
}];

[UIView animateWithDuration:kAnimationDuration
                 animations:^{
                     [self layoutIfNeeded];
} completion:^(BOOL finished) {

}];

我遇到的问题是,当视图被添加到窗口时,它不会保持与之前相同的位置,我认为,这是正确的行为,但看起来很奇怪。

动画从错误的地方开始。

通过以下方式实现使用框架并不困难:

  • 将视图转换为窗口(convertRect:toView:
  • 将视图移动到窗口(因此视图保持相同的位置)
  • 动画视图框架为全屏

我如何使用autolayout实现此目标? (或者我仍然需要使用框架?)

1 个答案:

答案 0 :(得分:0)

你基本上有你的问题的原因和解决方案。如果您没有更改超级视图,则不会出现问题。

按照您的描述获取并转换框架,但不要设置框架。使用框架设置初始约束。这将使视图保持在原始位置,即使它已移动到新的超视图(因此也是坐标系)。

现在将这些约束的常量设置设置为零。这将绘制视图的边缘以满足超视图边缘。