菜鸟教程小白 发表于 2022-12-12 18:21:16

ios - 动画self.view.frame?


                                            <p><p>我正在尝试使用 UIView 动画来模仿 UINavigationController 的 pushViewController,但我似乎遇到了问题。我无法为 self.view.frame 设置动画。</p>

<p>这是我正在使用的代码,但 self.view 不会移动!</p>

<pre><code>    ;
    ;   
    [UIView animateWithDuration:0.5
                     animations:^{
                         ;
                         ;
                     }
                     completion:^(BOOL finished){
                         ;
                     }];
</code></pre>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>考虑在动画开始之前 View 的位置:</p>

<ul>
<li><code>self.view.frame</code> 是(我假设)0,0,320,380</li>
<li><code>myViewController.view</code> 是 <code>self.view</code></li> 的 subview
<li><code>myViewController.view.frame</code> 是 320,0,320,480 <em>在 <code>self.view</code> 的坐标系</em>,所以它在其父 View 的框架之外(并离开屏幕的右边缘)</li>
</ul>

<p>现在考虑动画完成后 View 的位置:</p>

<ul>
<li><code>self.view.frame</code> 为 -320,0,320,480</li>
<li><code>myViewController.view</code> 仍然是 <code>self.view</code></li> 的 subview
<li><code>myViewController.view.frame</code> 在 <code>self.view</code> 的坐标系中是 0,0,320,480 <em></em>,所以它完全在其父 View 的框架内,但是它在屏幕坐标中的框架是-320,0,320,480,所以它现在完全不在屏幕的左边缘</li>
</ul>

<p>您需要使 <code>myViewController.view</code> 成为 <code>self.view</code> 的兄弟,而不是 subview 。试试这个:</p>

<pre><code>// Calculate the initial frame of myViewController.view to be
// the same size as self.view, but off the right edge of self.view.
// I don&#39;t like hardcoding coordinates...
CGRect frame = self.view.frame;
frame.origin.x = CGRectGetMaxX(frame);
myViewController.view.frame = frame;
;
// Now slide the views over.
[UIView animationWithDuration:0.5 animations:^{
    CGRect frame = self.view.frame;
    myViewController.view.frame = frame;
    frame.origin.x -= frame.size.width;
    self.view.frame = frame;
} completion:^(BOOL done){
    ;
}];
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 动画self.view.frame?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/8321253/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/8321253/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 动画self.view.frame?