菜鸟教程小白 发表于 2022-12-13 08:56:57

ios - UIView 自动布局在屏幕内或屏幕外滑动动画


                                            <p><p>我不知道如何使用自动布局制作滑入/滑出动画。</p>

<p>我添加这样的约束:</p>

<pre><code>NSDictionary *viewsDic = @{@&#34;tmpView&#34; : tmpView};
|&#34; options:0 metrics:nil views:viewsDic]];
|&#34; options:0 metrics:nil views:viewsDic]];

[UIView animateWithDuration:.4 animations:^{
      ;
    }];
</code></pre>

<p>但这动画会从 0,0 位置开始增长。如何实现滑入/滑出动画?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>据我了解,您需要获得移位效果。如果我的假设是正确的,您需要在动画期间手动管理水平或垂直填充。你需要得到水平/垂直约束的引用:</p>

<pre><code>@property (nonatomic, strong) NSLayoutConstraint *topPadding;
@property (nonatomic, strong) NSLayoutConstraint *heightConstraint;
</code></pre>

<p>添加具有初始值的约束,以便 <code>tmpView</code> 不在其父 View 的可见部分:</p>

<pre><code>self.heightConstraint = [NSLayoutConstraint constraintWithItem:tmpView
                                             attribute:NSLayoutAttributeHeight
                                             relatedBy:NSLayoutRelationEqual
                                                toItem:nil
                                             attribute:NSLayoutAttributeNotAnAttribute
                                              multiplier:1.0
                                                constant:0.0];

self.topPadding = [NSLayoutConstraint constraintWithItem:tmpView
                                           attribute:NSLayoutAttributeTop
                                           relatedBy:NSLayoutRelationEqual
                                              toItem:self.view
                                           attribute:NSLayoutAttributeTop
                                          multiplier:1.0
                                          constant:self.view.bounds.size.height];

;
;
</code></pre>

<p>那么我们只需要用动画显示 <code>tmpView</code>:</p>

<pre><code> ;

[UIView animateWithDuration:.4 animations:^{
    self.topPadding.constant = 0.0;
    self.heightConstraint.constant = self.view.bounds.size.height;

    ;
}];
</code></pre>

<p>这个例子 tmpView 从底部出现。
请确保 <code>self.topPadding</code> 不会与您的其他约束冲突</p>

<p>要隐藏 View ,您可以使用以下内容:</p>

<pre><code> ;

[UIView animateWithDuration:.4 animations:^{
    self.topPadding.constant = self.superview.bounds.size.height;

    ;
}];
</code></pre>

<p>UPD.:有时您还需要添加高度约束。在我的示例中添加了 <code>self.heightConstraint</code> 的使用</p>

<p>UPD.:您仍然需要水平约束。
请留下这些行:</p>

<pre><code>NSDictionary *viewsDic = @{@&#34;tmpView&#34; : tmpView};
|&#34; options:0 metrics:nil views:viewsDic]];
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIView 自动布局在屏幕内或屏幕外滑动动画,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/25423278/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/25423278/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIView 自动布局在屏幕内或屏幕外滑动动画