2

コンテンツ サイズを拡張した UIScrollView を使用しており、その中に多くのオブジェクトを配置しています。地図のようにスクロールします。UIScrollView 内のボタンをクリックすると、セグエが実行され、ユーザーは別のシーン (UINavigationController 内に埋め込まれた別の UIView) に移動します。2 番目のシーン内で別のボタンをクリックすると、別のセグエが実行され、元のシーン (マップのようにスクロールする UIScrollView) に戻ります。

元のシーンに戻るとデフォルトの位置に戻ることを除いて、すべて正常に動作します。元の位置を記憶させるにはどうすればよいですか?これが地図であると想像してください。戻ると、中断した場所が表示され、ユーザーは前の場所に再スクロールする必要はありません。どうやってやるの?

iOS 5 で Storyboard を使用しています。

4

4 に答える 4

4

前のビューに戻るには、Segueを使用しないでください。次のコード行を使用するだけです。

[self.navigationController popViewControllerAnimated:YES];

元のビューの位置はそのままである必要があります。Segueを使用して(前のビューに関係なく)別のビューにプッシュすることにより、実際には次のようなViewControllerの別のインスタンスを作成します。

VC A -> VC B -> VC A

VC AとBに別のボタンを追加してテストし、上記のコードを使用して、VCが順番にポップアップするかどうかを確認できます。VC Aの新しいインスタンスが作成されるため、VCAのスクロール位置は記憶されません。セグエを使用すると、最初のVCAに到達できるようになります。

于 2012-05-18T02:41:40.500 に答える
1

まずは確認

scrollView.delegate=self;

デリゲート メソッドの 2 番目、クラス変数として scrollView.contentOffset.x を覚えておいてください

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    self.offsetX = scrollView.contentOffset.x;
}

第三に、ナビゲーションから戻る

-(void)viewWillAppear:(BOOL)animated{
    CGRect frame=scrollView.frame;
    frame.origin.x=self.offsetX;
    [scrollView scrollRectToVisible:frame animated:NO];
}

または、垂直にスクロールする場合は offsetY を変更します

于 2012-05-18T04:43:53.913 に答える
0

UIScrollViewがViewControllerトランジション間のコンテンツ位置を記憶できるようにするには、トランジションの前にUIScrollView.contentSizeを正しく設定する必要があります。

于 2013-03-22T20:50:59.623 に答える
0

セグエを実行すると、「新しい」シーンがナビゲーションスタックにプッシュされます。その後、そのシーンが「ポップ」された場合(これは、新しいシーンでのUINavigationControllerの戻るボタンのデフォルトの動作になります)、ユーザーは、目的のコンテンツオフセットで元のビューに自動的に戻る必要があります。これが発生していない場合は、誤って元のViewControllerの新しいインスタンスをプッシュしている可能性があります。追加のセグエを実行するのではなく、ナビゲーションスタックからトップビューコントローラーをポップする必要があります。とは言うものの、コンテンツのオフセットが関係なく維持されるようにするために、このかなり手間のかかる方法を使用できます。

セグエを実行する前に、プロパティをscrollViewのcontentOffsetプロパティの値に設定します(例:

-(void)prepareForSegue
{
    [self setScrollViewOffset:self.scrollView.contentOffset];
}

このViewControllerが別の外観を作成する準備をするときに、scrollviewのcontentOffsetを設定します。

-(void)viewWillAppear
{
  [[self scrollView] setContentOffset:self.scrollViewContentOffset animated:NO];
}
于 2012-05-18T02:40:52.307 に答える