我期望在指定的持续时间后调用此UIView动画的完成关闭,但是它似乎立即触发了...

 UIView.animateWithDuration(
        Double(0.2),
        animations: {
            self.frame = CGRectMake(0, -self.bounds.height, self.bounds.width, self.bounds.height)
        },
        completion: { finished in
            if(finished) {
                self.removeFromSuperview()
            }
        }
    )

其他人有没有经历过?我已经读到其他人在使用中心而不是框架移动 View 方面取得了更大的成功,但是这种方法也存在相同的问题。

最佳答案

对于与此有关的其他任何人,如果有任何事情中断了动画,则会立即调用完成关闭。在我的情况下,这是由于与自定义segue即将退出的 View Controller 的模式转换略有重叠。使用delayUIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations:{}部分对我没有影响。我最终使用GCD将动画延迟了一秒钟。

// To avoid overlapping with the modal transiton
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {

    // Animate the transition
    UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {

         // Animations

         }, completion: { finished in

         // remove the views
         if finished {
             blurView.removeFromSuperview()
             snapshot.removeFromSuperview()
         }
    })
})

08-05 22:17