iOS新人求助关于UIScrollView旋转的问题

2012-12-27 18:52:03 +08:00
 Hellorld
最近在做的一个iPad应用,其中有一个很大的UIScrollView(大概有40个页面),这个Scrollview是横向滑动的。我现在遇到的一个难题是,当device旋转至landscape或是portrait时,scrollview上的40个subview要跟着一起旋转。我现在的解决方法是,在viewcontroller didload的时候init两个NSArray分别用来保存40个portrait subview和40个landscape subview。然后判断当前device的orientation,再把相应的那个NSArray中的subview添加到scrollview上去。然后在每次device旋转的时候,判断旋转后的orientation,再把scrollview上当前所有的subview remove掉再把另一个NSArray中的subview添加进来.同时重新调整scrollview的frame和contentsize,以及content offset,这样旋转后的scrollview仍然显示的是同一个页面.但是这样的方法在真机上测试时,可以感觉到明显的延迟,就是旋转后整个屏幕有短暂的停顿.所以想问下v2ex上的ios高手们有没有更好的解决方案.
4534 次点击
所在节点    iDev
7 条回复
jjgod
2012-12-27 18:55:02 +08:00
如果同时替换 40 个 subview 会有延迟,那么同时替换 3 个呢?正常情况下代码不应该同时缓存 80 个 subview,而只需要保存前一个、当前和后一个 subview 就够了。
Hellorld
2012-12-27 19:13:42 +08:00
@jjgod 就是说在滑动的时候再继续添加subview咯。比如我现在在第10页,然后我旋转device之后scrollview上其实只有9,10,11这三页。在我滑动到11页的时候添加第12页,或者在我滑动到第9页的时候往前添加第8页。我去试一下
alexrezit
2012-12-27 19:15:54 +08:00
直接 resize 呗... 存四十个你也不怕内存爆了~
发一个小例子, 最近写的, 因为赶时间代码比较糙.
http://gist.github.com/4387482
alexrezit
2012-12-27 19:18:40 +08:00
@alexrezit 代码里面 loadedGridItems 是已加载的 subview, 滚动的时候会把不可见的 subview 进行回收重用.
Hellorld
2012-12-27 19:31:15 +08:00
@alexrezit 基本看懂了,获益不少,thx
dingtianran
2013-01-03 22:08:44 +08:00
在旋转事件发生的时候重排所有subview

(不能覆盖view的layoutSubviews,要不然稍微动一点就触发了)
SoberZhou
2013-01-03 23:30:31 +08:00
我靠....好长...好大.... 这个没有自适应

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/56009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX