解决方案 »

  1.   

    view.frame = CGRectOffset(view.frame, 640, 0);这行放在动画执行完后的回调里面:[UIView animateWithDuration:1.0 animations:^{
        view.frame = CGRectOffset(view.frame, -320, 0);
    } completion:^(BOOL finished) {
        view.frame = CGRectOffset(view.frame, 640, 0);
    }];
      

  2.   

    楼上的正解,cpu正常情况下是按代码顺序执行的,你把view.frame = CGRectOffset(view.frame, 640, 0);这一句放在动画语句的后面会立即被执行,所以你需要用一个block封装起来,等动画结束后再执行,实现异步的效果
      

  3.   

    感谢!不过我一楼贴出的是简化版本的问题,实际问题比这个复杂些。。如果view.frame = CGRectOffset(view.frame, 640, 0);这句话是出现在其他函数(暂定为fun)中,且fun的执行是随时有可能的,测试过程中发现动画大部分时间是正确执行,只有当动画正要执行的时候,fun也刚好执行,这时就出现错误了。。有办法能获取动画的状态?如果正在执行则让fun晚点执行呢?
      

  4.   

    感谢!不过我一楼贴出的是简化版本的问题,实际问题比这个复杂些。。如果view.frame = CGRectOffset(view.frame, 640, 0);这句话是出现在其他函数(暂定为fun)中,且fun的执行是随时有可能的,测试过程中发现动画大部分时间是正确执行,只有当动画正要执行的时候,fun也刚好执行,这时就出现错误了。。有办法能获取动画的状态?如果正在执行则让fun晚点执行呢?
      

  5.   

    感谢!不过我一楼贴出的是简化版本的问题,实际问题比这个复杂些。。如果view.frame = CGRectOffset(view.frame, 640, 0);这句话是出现在其他函数(暂定为fun)中,且fun的执行是随时有可能的,测试过程中发现动画大部分时间是正确执行,只有当动画正要执行的时候,fun也刚好执行,这时就出现错误了。。有办法能获取动画的状态?如果正在执行则让fun晚点执行呢?
    你加一个标记吧,在动画开始和结束的时候更新标记,在fun方法里判断标记
      

  6.   

    感谢!不过我一楼贴出的是简化版本的问题,实际问题比这个复杂些。。如果view.frame = CGRectOffset(view.frame, 640, 0);这句话是出现在其他函数(暂定为fun)中,且fun的执行是随时有可能的,测试过程中发现动画大部分时间是正确执行,只有当动画正要执行的时候,fun也刚好执行,这时就出现错误了。。有办法能获取动画的状态?如果正在执行则让fun晚点执行呢?在动画执行完的block 块中去执行不就可以了 。 
      

  7.   

    感谢!不过我一楼贴出的是简化版本的问题,实际问题比这个复杂些。。如果view.frame = CGRectOffset(view.frame, 640, 0);这句话是出现在其他函数(暂定为fun)中,且fun的执行是随时有可能的,测试过程中发现动画大部分时间是正确执行,只有当动画正要执行的时候,fun也刚好执行,这时就出现错误了。。有办法能获取动画的状态?如果正在执行则让fun晚点执行呢?
    你加一个标记吧,在动画开始和结束的时候更新标记,在fun方法里判断标记
    好吧,试试看去
      

  8.   

    新人来到 学了一个月ios  的 ui 膜拜上面的大神们