Ale*_*ber 3 iphone uiscrollview uiimageview touchesbegan ios
在iPhone文字游戏中,我有一个UIScrollView(持有UIImageView)和7个可拖动的自定义UIViews,最初放在底部(滚动视图外):

在单个ViewController.m中,我已经覆盖了viewDidLayoutSubviews所以它总是设置zoomScale滚动视图 - 使UIImageView填充恰好100%的屏幕宽度.
这适用于纵向和横向模式.当应用程序刚刚启动时:


但问题是,当我第一次捏合/缩放/双击滚动视图然后移动七个Tile.m视图中的一个时:
突然(不是每次)都viewDidLayoutSubviews被称为touchesBegan.
这会重置滚动视图的缩放 - 意外地为用户.
我的问题是,是否有任何方法可以禁用此行为?
viewDidLayoutSubviews当孩子UIView被触摸/拖动时,是否可以阻止父母的呼叫?
更新:
我已经将zoomScale设置代码移动viewDidLayoutSubviews到didRotateFromInterfaceOrientation了,滚动视图缩放现在可以了,但它contentOffset被重置为{0,0},当(不总是)我拖动Tile时 - 即滚动视图突然跳跃,应用程序无法使用.
添加以下内容viewDidLoad没有帮助:
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)])
self.automaticallyAdjustsScrollViewInsets = NO;
Run Code Online (Sandbox Code Playgroud)
Leo*_*ica 10
viewDidLayoutSubviews只要系统在view(layoutSubviews)上执行布局,就会调用它.出于多种原因可以称之为; 你可以继承你的视图,实现一个空layoutSubviews方法(不要忘记调用super实现!)并在那里放一个断点,看看是谁导致布局.您可能还想实现setNeedsLayout并在layoutIfNeeded其中放置断点以供调查,因为这些触发布局在后续runloops上.
但是你永远无法阻止布局.系统会在您无法控制的许多场合执行布局.例如,如果用户拨打电话,则存在手机应用并返回到您的应用; 由于窗口的边界和框架已更改,因此会触发布局.通话结束; 再次触发布局,因为现在窗口恢复到以前的大小.
您应该负责确定何时设置缩放比例.例如,如果用户启动手势,即使执行了布局,您也应该发信号通知您的代码不执行更改.
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |