我有包含多个UIView
的UIScrollView
当我尝试为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];
}
}