将UIView的Alpha设置为UIScrollVIew的子视图非常缓慢



我有包含多个UIViewUIScrollView当我尝试为UIView中的一个setAlpha:时,我得到1.5秒的延迟,直到设置了UIViewα。

这是下面的代码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];
        }
    }
}

再次浏览您的代码。

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

最新更新