为UIVcrollVIew的子视图UIView设置Alpha非常慢

时间:2012-02-12 15:18:56

标签: objective-c ios uiview uiscrollview alpha

我的UIScrollView包含多个UIView 当我尝试setAlpha: UIView之一时,我会得到1.5秒的延迟,直到设置UIView alpha。

以下是代码 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 个答案:

答案 0 :(得分:1)

再次通过你的代码。

看起来你只能使用循环 用于设置alpha并设置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];
    }
}

因为只有一个带有alpha 0.6的视图 你可以避免循环并提高性能。

添加一个名为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];
  }
}