2

その一部でさまざまな画像をスクロールしてオーバーレイできるアプリを構築しています。各セグメントで画像を再度スクロールしてレイヤーを構築できる、一種のレイヤーシステムを作成するためのセグメント化されたコントロールがあります。何らかの理由で最初の画像が常に固定され、レイヤーに戻ると、ビューは元の位置にリセットされますが、最後の位置も保存されますか?

これが私のコードです。

- (void)layerControl
{
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scroll.pagingEnabled = YES;
NSInteger viewCount = 8;
for (int i = 0; i < viewCount; i++) {
    CGFloat yOrigin = i * self.view.frame.size.width;
    UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [filterViewOverlay setImage:[filterManager objectAtIndex:i]];
    [scroll addSubview:filterViewOverlay];
    //[filterViewOverlay release];
}
scroll.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height);
[self.view addSubview:scroll];
[scroll autorelease];

//Determine the current filter in view of the scroll view
CGFloat pageWidth = scroll.frame.size.width;
int cFilter = floor((scroll.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
currentFilter = cFilter;

}



//Method to add a filter to the page
- (void)addFilter:(id)sender
{
UISegmentedControl *filterController = (UISegmentedControl *)sender;

switch ([filterController selectedSegmentIndex])
{
    case 0: self.layerControl;

    case 1: self.layerControl;

    case 2: self.layerControl;

    case 3: self.layerControl;

    case 4: self.layerControl;

    case 5: self.layerControl;

    default: NULL;
}
}
4

1 に答える 1

0

self.layerControl を呼び出すたびに、ビューに新しい UIScrollView を作成しているように見えます。したがって、古いものはまだそこにあり、古い位置にありますが、別のものを追加しました.

おそらく、各 UIScrollView への参照を保存し、layerControl の先頭で特定のインデックスのスクロールビューを取得します。

そう:

- (void)layerControl:(NSInteger)index {
   UIScrollView *scrollView = nil;
   switch (index) {
      case (0): scrollView = self.scrollView1;
      /* Repeat for 1 - 6 */
   }

   if (scrollView == nil) {
      // Do the creation of the scrollview here
   }

次に、addFilter メソッド呼び出しで:

[self layerControl:[filterController selectedSegmentIndex]]

大きなスイッチステートメントではなく。

余談ですが、すべての self.layerControl 呼び出しのように、ドット構文でメソッドを呼び出すことはお勧めできません。合成されたプロパティにアクセスするときは、ドット構文を残しておく必要があります。

于 2011-11-17T00:27:16.097 に答える