多线程GCD与UIView 动画一起执行的不规律问题
下面是我的代码片段 其中COLUMN_COUNT 跟ROW_COUNT 都是 5
根据我的app的现象观察发现
imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d",dataArray[row][column]]];
NSLog(@"down :%d",dataArray[row][column]);
imgView.transform = CGAffineTransformMakeScale(0.8f, 0.8f);
这三句里面 NSLog 这句是执行的,而且输出的是我要的值,但是就是imgView设置image 跟 transform 不生效,当然,还包括后面的transorm。我从2个方面来判断,1.imgView的图片没有改变。2.tranform设置的动态效果没有出现。
这个现象不是必现的,所以我怀疑是不是我的 多线程或者 动画哪里没用对,导致出现这样不确定的现象?
if(MOVE_DIR_DOWN== dir) 这个条件以上没有其他关于多线程以及动画的操作。
请教高手,哪里出现了问题,万分感谢!!!
if( MOVE_DIR_DOWN == dir )
{
for( column = 0; column < COLUMN_COUNT; ++ column )
{
for( row = 0; row < ROW_COUNT; ++ row )
{
//if( moveArray[row][column] != 0 )
{
UIImageView * imgView = (UIImageView*)[gridBgView viewWithTag:(row * COLUMN_COUNT + column + GRID_TAG_BASE)];
dispatch_async(dispatch_get_main_queue(), ^(void){
[UIView animateWithDuration:0.08f animations:^(void){
CGPoint pt = imgView.center;
pt = CGPointMake(pt.x ,pt.y + (PER_GRID_HEIGH + GRID_TIP_Y) * moveArray[row][column]);
imgView.center = pt;
}completion:^(BOOL bFinished){
if( delArray[row][column])
{
NSLog(@"delImg:row=%d column=%d",row,column);
[imgView removeFromSuperview];
}
else
{
imgView.tag = row * COLUMN_COUNT + column + moveArray[row][column]*COLUMN_COUNT+GRID_TAG_BASE;
if( spEffArray[row][column] )
{
NSLog(@"spEff row:%d column:%d",row,column);
[UIView animateWithDuration:0.05f animations:^(void){
imgView.transform = CGAffineTransformMakeScale(1.1f, 1.1f);
}completion:^(BOOL bFinished){
[UIView animateWithDuration:0.05f animations:^(void){
imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d",dataArray[row][column]]];
NSLog(@"down :%d",dataArray[row][column]);
imgView.transform = CGAffineTransformMakeScale(0.8f, 0.8f);
}completion:^(BOOL bFinished){
[UIView animateWithDuration:0.05f animations:^(void){
imgView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
}completion:^(BOOL bFinished){
}];
}];
}];
}
}
}];
});
}
}
}
}