我一直在努力解决我的 UIView 子类动画方式中的一个看似小故障。我的 View 设置如下:
self.contentMode = UIViewContentModeRedraw;
self.contentStretch = CGRectMake(0.5f, 0.5f, 0.0f, 0.0f);
View 基本上是一个具有 3 像素笔划的矩形。因为我希望 View 在调整大小时不变形,所以我有 contentStretch 属性来指示 View 的中间。问题是,变形在增长时发生,但在收缩时却很平滑。
看起来我的动画 block 很简单;我有单独的增长和收缩。这是增长的 block :
[UIView animateWithDuration:0.5 animations:^{
CGRect newRect = CGRectMake(20, 100, 200, 70);
[titleView setFrame:newRect];
}];
这很难在帖子中描述,因此我组装了一个测试用例项目,该项目仅隔离与此相关的部分。如果有人想看看?
http://dl.dropbox.com/u/2798577/ViewResizeTest2.0.zip
您可以看到当您点击“增长”按钮时, View 的左侧在动画之前出现“故障”。虽然在这里清晰可见,但在我的实际项目中它有点糟糕。
我不确定这是我的代码中的错误还是框架的问题?希望是前者……
谢谢,
亚伦。
更新
收到 Jacob 的慷慨反馈后,我回到了我的应用程序并将 contentMode 设置删除为 UIViewContentModeRedraw,并注意到它会在每次动画时运行 drawRect,也许初始帧是故障的一部分。所以现在动画很流畅,但是它动画到了错误的位置,挤压了两边。我已将链接项目更新为更准确地反射(reflect)我的应用程序中正在发生的事情。
如果我不得不猜测,那么 contentStretch 属性似乎没有发挥作用。根据我的指示,它正在调整整个事物的大小,而不是内部的 CGRect 区域。谁能确认我是否使用正确?
Best Answer-推荐答案 strong>
我现在已经弄清楚了;这是遇到此问题的其他人的答案。
UIView 的 contentStretch 属性的文档并没有讲述完整的故事。就我而言,我理解 contentStretch 的目的是描述应该改变大小的区域的“样本”。相反, contentStretch 需要描述要调整大小的整个区域。在我写这篇文章时,现在这更有意义了,但以前对我来说并不明显。
因此,我原来的声明:
self.contentStretch = CGRectMake(0.5f, 0.5f, 0.0f, 0.0f);
描述了一个没有宽度或高度的矩形!所以它实际上什么也没做。相反,我使用了一个包含大部分 View 边界的矩形,except 用于结束,我不想因为尺寸变化而扭曲:
self.contentStretch = CGRectMake(0.2, 0, 0.7, 1);
请注意,它是一个矩形,从 x 轴的 20% 开始,在全高处跨越 70% 的宽度。在我的直肠需要的尺寸中,它很好地覆盖了它。
感谢 Jacob 建议删除 contentMode 属性;在这种情况下这是完全没有必要的。
干杯,
亚伦。
关于iphone - UIView 调整大小动画故障,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/6619239/
|