如何改变uiview的表现?
我在ipad上有一个高级uiview,我希望在iphone上以较小的比例显示。 简单的黑客是对uiview进行转换:
self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);
这非常符合观点,但表现如何呢?
替代方案是使视图中的每个项目都能够根据设备进行缩放。
在缩放uiviews时,转换被认为是不好的做法吗?
感谢。
答案 0 :(得分:0)
由于这是GPU加速操作,因此没有性能下降(至少在现实生活中无关紧要)。
但请注意,您可能无法再访问frame
媒体资源,现在它被视为无效:您需要访问/修改bounds
和center
。由于这个原因,我遇到了AutoLayout和转换问题,但YMMV。
警告:如果此属性不是标识转换,则 frame 属性的值未定义,因此应忽略。
因此,如果你能忍受这些限制,那么应用变换没有任何问题(旋转和翻译也很好)。
答案 1 :(得分:0)
我认为你根本没有没有性能损失。为什么呢?
转换技巧是您可以将它们连接到单个转换中,然后将此单个转换应用于输出。所以,如果你有三个转换
T1,T2,T3
连接,每个点将不转换三次,如下所示:
P'= P×T1×T2×T3
使转变变慢。相反,在应用转换时,这些转换为新的转换
T'= T1×T2×T3
然后将这个新转换应用于输出:
P'= P×T'
因此,每次使用的转换都不会受到惩罚。 (有一个非常非常小的惩罚,当设定转换时,你会得到一次整个视图的惩罚:不要在意。)
此外,在大多数情况下,始终使用一种转换:单位转换。 (这是正确的英语术语吗?)原因是代码更容易使用“不做任何转换”而不是询问是否存在转换。此外,系统可以设置转换供自己使用,即。即平移,转动90°等等。
所以:完全不关心。我不指望你能衡量任何惩罚。
BTW:Donald Knuth。