为UIView设置Alpha是UIScrollVIew的子视图,速度非常慢

我有UIScrollView包含几个UIView当我尝试setAlpha:对于UIView ,我得到1.5秒的延迟,直到UIView阿尔法设置。

下面是setContentOffsetsetAlpha:之前运行的代码setAlpha:尽pipesetAlpha:在代码中被写入

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