改变表现

时间:2014-06-24 09:16:56

标签: ios iphone objective-c ipad uiview

如何改变uiview的表现?

我在ipad上有一个高级uiview,我希望在iphone上以较小的比例显示。 简单的黑客是对uiview进行转换:

self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);

这非常符合观点,但表现如何呢?

替代方案是使视图中的每个项目都能够根据设备进行缩放。

在缩放uiviews时,转换被认为是不好的做法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

由于这是GPU加速操作,因此没有性能下降(至少在现实生活中无关紧要)。

但请注意,您可能无法再访问frame媒体资源,现在它被视为无效:您需要访问/修改boundscenter。由于这个原因,我遇到了AutoLayout和转换问题,但YMMV。

来自transform documentation

  

警告:如果此属性不是标识转换,则 frame 属性的值未定义,因此应忽略。

因此,如果你能忍受这些限制,那么应用变换没有任何问题(旋转和翻译也很好)。

答案 1 :(得分:0)

我认为你根本没有没有性能损失。为什么呢?

转换技巧是您可以将它们连接到单个转换中,然后将此单个转换应​​用于输出。所以,如果你有三个转换

T1,T2,T3

连接,每个点将转换三次,如下所示:

P'= P×T1×T2×T3

使转变变慢。相反,在应用转换时,这些转换为新的转换

T'= T1×T2×T3

然后将这个新转换应用于输出:

P'= P×T'

因此,每次使用的转换都不会受到惩罚。 (有一个非常非常小的惩罚,当设定转换时,你会得到一次整个视图的惩罚:不要在意。)

此外,在大多数情况下,始终使用一种转换:单位转换。 (这是正确的英语术语吗?)原因是代码更容易使用“不做任何转换”而不是询问是否存在转换。此外,系统可以设置转换供自己使用,即。即平移,转动90°等等。

所以:完全不关心。我不指望你能衡量任何惩罚。

BTW:Donald Knuth。