我的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];
}
}
}
答案 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];
}
}