为UIView设置Alpha是UIScrollVIew的子视图,速度非常慢
我有UIScrollView
包含几个UIView
当我尝试setAlpha:
对于UIView
,我得到1.5秒的延迟,直到UIView
阿尔法设置。
下面是setContentOffset
在setAlpha:
之前运行的代码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]; } }