1

写真アプリによく似た画像ビューアを開発しています。

これは、インターネットから読み込まれた画像でページングが有効になっている UIScrollView であるため、LazyTableImages サンプルの一部を変更しました。スクロール ビューとその中の各 ImageView には、すべての自動サイズ変更マスク フラグが設定されています。

回転中にサイズ変更がどのように行われているかを最初に観察したときは、問題ないように見えましたが、スクロール ビューを操作しようとすると、contentView のサイズもプログラムで変更する必要があることに気付きました。ビューコントローラーに didRotateFromInterfaceOrientation: を実装することでそれを行いました。

[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];

インタラクションが適切に動作していると、2 番目の写真を表示して回転させると、1 番目と 2 番目の写真の両方の部分が画面に表示されることがわかりました。contentOffset も変更する必要がありました。

UIScrollView の scrollRectToVisible:animated: メソッドを使用する方法と、contentOffset プロパティを直接設定する方法の両方で、この 2 つの方法を修正しようとしました。そして、このコードを Orientation の変化に対する "1 ステップ" と "2 ステップ" の両方の応答の実装に入れてみました。例えば:

-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];

ただし、すべての場合において、それは地獄のようにぎこちなく見えます。スクロールがはっきりと見えるか、ジャンプするだけです。ううううううう!写真アプリとまったく同じように動作するようにこれを行う方法はありますか?

4

2 に答える 2

4

代わりに私がやったこと-回転が始まる直前に、UIScrollViewを非表示にして、現在表示されている画像を含むUIImageViewを作成します。回転すると、その画像はすべてき​​れいに回転します。回転が完了したら、ImageViewを削除し、スクロールビューを再表示します。

更新-今日(iOS 6以降)これを読んでいる場合は、UIPageViewControllerを使用し、transitionStyleをUIPageViewControllerTransitionStyleScrollに設定してください。

于 2010-05-28T03:42:12.730 に答える
1

同じ問題に直面したとき、私は少し違うことをしました。ではwillRotateToInterfaceOrientation:duration:、現在表示されているサブビューを除く UIScrollView のサブビューをすべて非表示にし、サブビューdidRotateFromInterfaceOrientation:を再表示します。

于 2010-08-23T03:20:30.597 に答える