如何在我的应用重新启动时动态恢复 UIScrollView 的缩放级别和位置?

Posted

技术标签:

【中文标题】如何在我的应用重新启动时动态恢复 UIScrollView 的缩放级别和位置?【英文标题】:How to dynamically restore the UIScrollView's zoom level and position when my app relaunches? 【发布时间】:2009-03-17 15:50:40 【问题描述】:

我的应用程序由UIImageViewUIScrollView 组成,我在其中显示了一个大图像。滚动视图允许用户通过捏合来放大/缩小图像,这一切似乎都很好。

但是,当我的应用程序被终止然后重新启动时,UIScrollView 再次以原始缩放级别显示图像(当前设置为显示整个图像,通过在“宽高比”模式下缩放它)。

我真的希望能够重新启动我的应用程序并使用与应用程序终止时设置的参数相同的参数重新打开UIScrollView。因此,如果我的图像当前被放大到最大,并一直滚动到它的左下角,那应该是我再次打开应用程序时的视图。

我该怎么做?

【问题讨论】:

【参考方案1】:

检查视图的 .transform 属性。如果放大,则应进行修改。保存并在下次启动时恢复。

【讨论】:

【参考方案2】:

我找到了一种以编程方式缩放 UIScrollView 的方法。这可以帮助您在启动时设置所需的缩放级别。

示例代码以及封装所需缩放魔法的 ZoomScrollView 类以及关于 UIScrollView 缩放如何(以及为什么)工作的详细讨论可在github.com/andreyvit/ScrollingMadness/ 获得。

【讨论】:

【参考方案3】:

不久前有人问过这个问题,但我认为你不会喜欢the answer。希望你能取得更好的成绩。

【讨论】:

【参考方案4】:

我这样做: 退出时保存缩放级别 (myScrollview.zoomScale) 和 contentview 框架原点。

当您重新打开时,您可以设置缩放比例。您还必须将内容大小设置为新的缩放级别,否则边界不正确。

    [myScrollview setZoomScale:savedZoomScale];
    CGSize newsize = CGSizeMake(origsize.width * savedZoomScale, 
                                 origsize.height * savedZoomScale);
    myScrollview.contentSize = newsize;

设置偏移量:

[myScrollView setContentOffset:savedFrameOrigin animated:YES];

【讨论】:

以上是关于如何在我的应用重新启动时动态恢复 UIScrollView 的缩放级别和位置?的主要内容,如果未能解决你的问题,请参考以下文章

前台服务内容意图不是恢复应用程序而是重新启动它

重新启动应用程序时如何恢复导航控制器路径?

可以运行一个应用程序然后重新启动 iPhone 吗?

Flutter - 恢复时不要重新启动应用程序

当用户在 10 秒内重新启动关闭的 Windows 商店应用程序时如何恢复数据

动态更改PHP变量(在执行时)