2015-06-15 156 views
0

我正在寻找一个长的过程(解析)完成时的一些事情动画。我的准系统代码目前看起来像这样:后台线程完成后的动画(iOS/Swift)

func run_on_background_thread(code:() -> Void) 
{ 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), code) 
} 

func run_on_main_thread(code:() -> Void) 
{ 
    dispatch_async(dispatch_get_main_queue(), code) 
} 

func manage_response() 
{ 
    run_on_background_thread 
    { 
     long_process() 
     run_on_main_thread 
     { 
      UIView.animateWithDuration(animation_duration, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.8, options: UIViewAnimationOptions.CurveEaseInOut, animations: 
       { 
        some_view.transform = CGAffineTransformMakeScale(0, 0) 
       }, completion: nil) 
     } 
    } 
} 

很明显,动画不会发生。界面只是更新到最后阶段。什么是线程这(我知道animateWithDuration()派遣的它自己的线程的正确方法,但我不知道如何,直到漫长的过程完成后持有该动画。

感谢。

回答

2

我觉得你这样可以工作只是改变

some_view.transform = CGAffineTransformMakeScale(0, 0) 

到:

some_view.transform = CGAffineTransformMakeScale(0.01, 0.01) 

变化接近于零刻度值; U可以看到动画出现,如果刻度值== 0,没有一个。发生。你可以试试这个。

+0

这可以解决缩放问题,但存在的情况是位置动画发生在一帧中,而不是通过持续时间。 – Ryan

+0

U可以完成一些代码并删除视图。 – Zhengjie

+0

是的,我计算并实现了这一点。我认为你不了解这个问题;如果在完成块内部,例如我有: self.some_subview.center.y + = some_constant也会存在不一致的问题(意味着竞争条件) – Ryan