アプリの再起動時にUIScrollViewのズームレベルと位置を動的に復元する方法は?
-
19-08-2019 - |
質問
私のアプリケーションはUIImageView
内のUIScrollView
で構成され、その中に大きな画像を表示します。スクロールビューを使用すると、ユーザーはピンチして画像をズームイン/ズームアウトできますが、すべて正常に機能しているようです。
ただし、アプリケーションを終了してから再起動すると、<=>は元のズームレベルで画像を再度表示します(現在は画像全体を表示するように設定されており、<!> quot;アスペクトフィット<!> quot;モード)。
本当にアプリを再起動して、アプリが終了したときに設定されたのと同じパラメーターで<=>を再起動できるようにしたいと思います。そのため、現在画像が最大に拡大されており、その左下までスクロールされている場合は、アプリを再度開いたときに表示されるはずです。
これを行うにはどうすればよいですか
解決
UIScrollViewをプログラムでズームする方法を見つけました。これにより、起動時に目的のズームレベルを設定できます。
必要なズームマジックをカプセル化するZoomScrollViewクラスと、UIScrollViewズームの仕組み(および理由)の詳細な説明を含むサンプルコードは、 github.com/andreyvit/ScrollingMadness/ 。
他のヒント
ビューの.transformプロパティを確認します。ズームインしている場合、これを変更する必要があります。次回の起動時に保存して復元します。
誰かがこれをしばらく前に尋ねましたが、答え。うまくいけばもっと良いものが手に入るでしょう。
このようにします: 終了したら、ズームレベル(myScrollview.zoomScale)とcontentviewフレームの原点を保存します。
再度開くと、ズームスケールを設定できます。また、コンテンツサイズを新しいズームレベルに設定する必要があります。そうしないと、境界が正しくありません。
[myScrollview setZoomScale:savedZoomScale];
CGSize newsize = CGSizeMake(origsize.width * savedZoomScale,
origsize.height * savedZoomScale);
myScrollview.contentSize = newsize;
オフセットを設定するには:
[myScrollView setContentOffset:savedFrameOrigin animated:YES];