2012-02-12 33 views
0

私はUIScrollViewを持っています。もう一度あなたのコードの谷行ってきました。ここ非常に遅い

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

に前に書かれているが setContentOffset次のコードは、setAlpha:前に実行さんです。

アルファ設定にはループ しか使用できないと思われ、contentOffset を後で設定します。アルファ0.6 であなたがループを回避し、パフォーマンスを向上させることができる唯一のビューが常に存在するため

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

コードはこれだろう。

transparentViewIndexという整数プロパティを追加し、 を-1に初期化します。改善されたコードは次のようになります:

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