菜鸟教程小白 发表于 2022-12-12 10:02:11

iphone - UIView 动画 iOS,诡异


                                            <p><p>我可能在做一些非常愚蠢的事情,但我不知道为什么这不起作用。</p>

<p>我正在尝试执行一个简单的 UIViewblock 动画,但遇到了麻烦。我在一个测试项目中重新创建了。</p>

<p>我在 ViewController 上有一个 View ,当我按下按钮时,我会创建一个新 View 并将其框架设置为当前 View 之外(在其上方)。我想为过渡设置动画,以使当前屏幕上的 View 向下移出 View ,因为它上面的新 View 下降以取代它的位置。</p>

<p>这是连接到按钮的代码,
原始 View 连接为 <code>self.view1</code></p>

<pre><code>- (IBAction)buttonPressed:(id)sender {

    UIView *view2 = [ init];
    view2.backgroundColor = ;
    float offScreenY = 0 - self.view1.frame.size.height;
    CGRect offScreenRect = CGRectMake(0, offScreenY, self.view1.frame.size.width, self.view1.frame.size.height);
    view2.frame = offScreenRect;
    ;

    float oldY = self.view1.frame.origin.y + self.view1.frame.size.height;
    CGRect oldRect = CGRectMake(0, oldY, self.view1.frame.size.width, self.view1.frame.size.height);

    [UIView animateWithDuration:0.5 animations:^{
      self.view1.frame = oldRect;
      view2.frame =CGRectMake(0, 0, self.view1.frame.size.width, self.view1.frame.size.height);
    }];
}
</code></pre>

<p>这只是动画 view2 向下而不是动画 view 1。</p>

<p>如果我不将 View2 添加为 subview ,并且仅将 View1 的帧更改放在动画 block 中,则 View1 会正确设置动画。</p>

<p>但他们不会一起工作!</p>

<p>这是为什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是开启自动布局的典型症状。如果您为 <code>frame</code> 设置动画,它会起作用,但是一旦自动布局重新应用 View 上的约束,<code>view1</code> 将返回到其原始位置。通过添加 <code>view2</code>,iOS 会立即自动重新应用自动布局约束,因此您的 <code>view1</code> 不会移动。</p>

<p>底线,不要使用自动布局并尝试直接为 <code>frame</code> 属性设置动画。两种解决方案:</p>

<ol>
<li><p>简单的解决方案是关闭自动布局。转到 IB,选择“文件检查器”并取消选中“使用自动布局”按钮:</p>

<p> <img src="/image/sq4H0.png" alt="enter image description here"/> </p></li>
<li><p>如果你想保持自动布局,你不应该通过直接改变 <code>frame</code> 属性来制作动画。您可以通过更改布局约束常量来制作动画。这已在 S.O. 的其他地方得到解答,但如果您需要有关该方法的指导,请告诉我。 </p>

<p>不过,基本的想法是为 <code>view1</code> 的顶部约束创建一个 <code>IBOutlet</code>,称为 <code>view1TopConstraint</code>,然后在你可以说你的动画 block </p>

<pre><code>self.view1TopConstraint.constant += self.view1.frame.size.height;
;
</code></pre>

<p>不过,要使其正常工作,您必须注意对 <code>view1</code> 的其他约束(例如,有高度约束、没有底部约束,或者如果有,请降低其优先级等)。第一次这样做可能会很麻烦,但通过更改约束,您很快就会掌握动画制作的窍门。</p>

<p>但是,再一次,如果您使用约束,您可能不应该通过 <code>frame</code> 定义 <code>view2</code>,但也可能为此定义约束。 </p></li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - UIView 动画 iOS,诡异,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15762015/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15762015/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - UIView 动画 iOS,诡异