【问题标题】:UIImageView and UIButton mess image after screen rotation屏幕旋转后的 UIImageView 和 UIButton 混乱图像
【发布时间】:2013-04-11 22:46:59
【问题描述】:

我正在尝试用箭头制作容器。容器是UIView,箭头是UIImageView,定位在父中心的对面。

我创建了一个带有背景图像按钮的“弹出框”并添加了一个箭头。它工作得很好。

你看到矩形的边很锋利。

好的,让我们旋转。

WAT。再次旋转...

图像被缩放。甚至调整大小也不是一成不变的。但是所有框架都可以。

旋转前

2013-04-18 21:20:41.198 Project[15790:907] 
conta: {{124, 313}, {200, 49}}
content: {{0, 9}, {200, 40}}
arrow: {{87, 0}, {19, 9}}

旋转后

2013-04-18 21:22:06.717 Project[15790:907] 
container: {{161, 387}, {200, 49}}
content: {{0, 9}, {200, 40}}
arrow: {{87, 0}, {19, 9}}

那里发生了什么?我尝试了几乎所有的内容模式或其他方式。 autoresizeSubviews 关闭所有视图。

【问题讨论】:

    标签: ios objective-c uiimageview uibutton uikit


    【解决方案1】:

    旋转后,在相关视图的框架上调用CGRectIntegral

    问题的原因是你在像素之间结束,所以一切都被混叠了。这通常发生在例如视图居中。

    在模拟器中确认发生这种情况的快速方法是检查调试 > 颜色未对齐的图像。如果这些图像是彩色的,那么是的,它们没有对齐:它们不是在整数像素坐标处绘制的。

    【讨论】:

    • 我现在在兜圈子。箭头可以改变它的 x 位置(它会有一个分数部分),CGRectIntegral 可以(并且将会)放大它,箭头和按钮会有白色的交叉点。但是,如果我在调用此函数之前调用sizeToFit 或将其大小设置为大小,甚至在浮点x 坐标上调用round,您的方法将根本不起作用,因为CGRectIntegral 将对此CGRect 无能为力。
    • 我已经解释了问题的根源(小数点数量映射到整数屏幕像素)。您可以使用自动调整大小或自动布局或手动布局 (layoutSubviews) 来防止您反对的副作用。你保留了绘制这些东西的代码,所以我不能告诉你更多细节。
    • 感谢您的更新,对我帮助很大。因为这个视图在层次结构中非常深,我的解决方案是在主窗口中获取视图的坐标并计算rounded 坐标和初始值之间的差异,然后将其应用于超级视图的bounds 中的坐标(然后它变成了分数)。它有效。
    【解决方案2】:

    如果计算箭头的高度,旋转前高度为 18 像素,旋转后高度为 19 像素。

    因此,当您进行缩放时,它会发生抗锯齿并创建灰线。因此,您可以通过多种方式进行操作。这是一篇关于以正确方式调整大小的精彩帖子:

    http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多