2012-02-12 15 views
0

我有UIScrollView包含幾個UIView 當我嘗試setAlpha:UIView之一,我得到1.5秒延遲,直到UIView Alpha設置。設定爲阿爾法UIView的是的UIScrollView的子視圖很慢

這裏是低於 setContentOffset的代碼並運行setAlpha:雖然setAlpha:在代碼

-(void)setAlphaForIndex:(int)Index{ 

    for (UIView *v in imgScroll.subviews){ 

     if (v.tag == Index) { 
      [v setAlpha:0.6]; 
      if (![self checkIfImageInScrollRange:Index]){ 
       if (v.tag < 5) 
        [imgScroll setContentOffset:CGPointMake(0, 0) animated:YES]; 
       else 
        [imgScroll setContentOffset:CGPointMake((Index - 5) * (CELLWIDTH) + (Index - 5 - 1) * 3, 0) animated:YES]; 
      } 
     } else { 
      [v setAlpha:1.0]; 
     } 
    } 
} 

回答

1

之前寫之前又去低谷代碼。

它看起來像你可以使用循環只有 設置阿爾法和稍後設置contentOffset 。

代碼將是這樣的:

-(void)setAlphaForIndex:(int)Index { 

    for (UIView *v in imgScroll.subviews) { 

     if (v.tag == Index) 
      [v setAlpha:0.6]; 
     else 
      [v setAlpha:1.0]; 
    } 

    if (![self checkIfImageInScrollRange:Index]){ 
     if (Index < 5) 
     [imgScroll setContentOffset:CGPointMake(0, 0) animated:YES]; 
     else 
     [imgScroll setContentOffset:CGPointMake((Index - 5) * (CELLWIDTH) + (Index - 5 - 1) * 3, 0) animated:YES]; 
    } 
} 

由於始終只有一個視圖阿爾法0.6 可以避開環路和提高性能。

添加一個名爲transparentViewIndex的整型屬性,並將其初始化爲 。改進後的代碼將如下所示:

-(void)setAlphaForIndex:(int)Index{ 

    if (self.transparentViewIndex > -1) [[imgScroll viewWithTag: transparentViewIndex] setAlpha:1.0]; 

    [[imgScroll viewWithTag: Index] setAlpha:0.6]; 

    self.transparentViewIndex = Index; 

    if (![self checkIfImageInScrollRange:Index]){ 
    if (Index < 5) 
     [imgScroll setContentOffset:CGPointMake(0, 0) animated:YES]; 
    else 
     [imgScroll setContentOffset:CGPointMake((Index - 5) * (CELLWIDTH) + (Index - 5 - 1) * 3, 0) animated:YES]; 
    } 
} 
相關問題