需求:在点击button的之后播放音乐里,button的背景频繁在1.png和2.png之间切换当前的代码:
-(void)btnImageChange{

bool c=FALSE; while(!playFinish) {//没有播放完音乐,button的image就一直变 while(c) {
                        //我把图片提前存进了一个objact的数组中,数组叫soundImage
[soundBtn setImage:[soundImage objectAtIndex:0] forState:UIControlStateNormal];
NSLog(@"aaaa");
c=FALSE;
[NSThread sleepForTimeInterval:0.5];  //变完后此线程休眠500毫秒
  }
[soundBtn setImage:[soundImage objectAtIndex:1] forState:UIControlStateNormal]; 
NSLog(@"bbbb");
c=TRUE;
[NSThread sleepForTimeInterval:0.5];   //变完后此线程休眠500毫秒
}
}控制台打印:
bbbb
aaaa
bbbb
aaaa
bbbb
aaaa
bbbb
aaaa头疼了一天的问题是:图片压根没变,打印正常说明两处的setImage都执行了,为什么会不变,控制台没有丝毫的异常,啊,神啊,来救救我吧~~~~
弱弱的问一句:iphone中button是不是设置image完了要clear一下,不然后面再设置image就没有效果,但是具体clear什么不清楚,只是胡猜,还请大牛来解答一下

解决方案 »

  1.   

    要确定[soundImage objectAtIndex:0]取出来的是个UIImage,如果是其他类型的,那么图片就不会变。
    建议把[soundImage objectAtIndex:0]单独拿出来调试,不要和setimage函数放在一起。
      

  2.   

    要确定[soundImage objectAtIndex:0]取出来的是个UIImage,如果是其他类型的,那么图片就不会变。
    建议把[soundImage objectAtIndex:0]单独拿出来调试,不要和setimage函数放在一起。
      

  3.   

    图片设置变化一般需要在主线程中设置才会被更新,我以前在修改tableView的图片时候遇到类似的问题,使用performSelectorOnMainThread在主线程中执行改变button的image应该可以解决这个问题
      

  4.   

    或许可以这样:
    在播放前就开始显示动画,用 perform afterDealy然后播放audio
    结束了停止动画
      

  5.   

    [soundBtn setImage:[UIImage imageNamed:[m_imagviewarray objectAtIndex:0]] forState:UIControlStateNormal];
    改成这样就可以了
      

  6.   


    [soundBtn setImage:[UIImage imageNamed:[soundImage objectAtIndex:0]] forState:UIControlStateNormal];
    改成这样就可以了
      

  7.   

    还有一种情况要试一下
    可能是没有触发View的重绘方法
    手动setNeedsDisplay 重绘一下,看看图片能否显示
      

  8.   

    把图片提前存进了一个objact的数组中,数组叫soundImage
    ----------
    确定没有被释放,能正确读出来。
      

  9.   

    代码有明显问题:
    代码是在一个UI里运行的吧,UI线程运行完才会刷新;
    NSThread阻塞500ms,UI线程就会被阻塞500ms, 所以图片变化效果你根本看不到的。
    你需要把[soundBtn setImage:[soundImage objectAtIndex:1] forState:UIControlStateNormal]; 
    这种代码放到
    performOnMainThread.....WaitUntilDone:NO  的方法中去实现才行,强制执行刷新。