2011-11-17 27 views
2

我正在構建一個應用程序,其中的一部分允許您滾動瀏覽不同的圖像進行覆蓋。我有一個分段控件來創建一種分層系統,其中每個分段允許您再次滾動圖像並構建圖層。由於某種原因,第一張圖像總是會粘住,當我返回到圖層時,視圖會重置爲原始位置,但也會保存最後一個位置?保存UIScrollView的視圖

這是我的代碼。

- (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; 
} 
} 

回答

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]] 

,而不是大的switch語句。另外,用像所有那些self.layerControl調用一樣的點語法調用方法並不是一個好主意。 在訪問合成屬性時,您應該保留點語法。

+0

非常感謝!我是新的Objective-C編程,所以我會記住你的.dot語法建議。再次感謝! –

+0

我可以只問案例開關'案例0:scroll = self.scroll1' - 'scroll1'是什麼引用?歡呼聲 –

+0

self.scroll1只是引用了您將在該類的標題中定義的保留屬性。 你會有scroll1,scroll2 ... scroll6,每個圖層都會保存對每個圖層的滾動視圖的引用。 – tobyc