V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
Hellorld
V2EX  ›  iDev

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

  •  
  •   Hellorld · 2012-12-27 18:52:03 +08:00 · 4534 次点击
    这是一个创建于 4380 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在做的一个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高手们有没有更好的解决方案.
    7 条回复    1970-01-01 08:00:00 +08:00
    jjgod
        1
    jjgod  
       2012-12-27 18:55:02 +08:00
    如果同时替换 40 个 subview 会有延迟,那么同时替换 3 个呢?正常情况下代码不应该同时缓存 80 个 subview,而只需要保存前一个、当前和后一个 subview 就够了。
    Hellorld
        2
    Hellorld  
    OP
       2012-12-27 19:13:42 +08:00
    @jjgod 就是说在滑动的时候再继续添加subview咯。比如我现在在第10页,然后我旋转device之后scrollview上其实只有9,10,11这三页。在我滑动到11页的时候添加第12页,或者在我滑动到第9页的时候往前添加第8页。我去试一下
    alexrezit
        3
    alexrezit  
       2012-12-27 19:15:54 +08:00
    直接 resize 呗... 存四十个你也不怕内存爆了~
    发一个小例子, 最近写的, 因为赶时间代码比较糙.
    http://gist.github.com/4387482
    alexrezit
        4
    alexrezit  
       2012-12-27 19:18:40 +08:00   ❤️ 1
    @alexrezit 代码里面 loadedGridItems 是已加载的 subview, 滚动的时候会把不可见的 subview 进行回收重用.
    Hellorld
        5
    Hellorld  
    OP
       2012-12-27 19:31:15 +08:00
    @alexrezit 基本看懂了,获益不少,thx
    dingtianran
        6
    dingtianran  
       2013-01-03 22:08:44 +08:00
    在旋转事件发生的时候重排所有subview

    (不能覆盖view的layoutSubviews,要不然稍微动一点就触发了)
    SoberZhou
        7
    SoberZhou  
       2013-01-03 23:30:31 +08:00
    我靠....好长...好大.... 这个没有自适应
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1068 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.