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'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]