我正在尝试在新添加的UIImageView上作为子视图启动动画但是在这种情况下似乎立即调用完成块,即使在CATransaction.setCompletionBlock之后添加了动画
addSubview(imageView)
CATransaction.begin()
let posAnimation = positionAnimation(startPoint: startPoint, endPoint: endPoint, beginTime: beginTime, duration: duration)
let alpAnimation = alphaAnimation(beginTime: beginTime, duration: duration)
CATransaction.setCompletionBlock{ [weak self] in
print("deleting view")
//imageView.removeFromSuperview()
}
imageView.layer.add(posAnimation, forKey: nil)
imageView.layer.add(alpAnimation, forKey: nil)
CATransaction.commit()
动画:
private func positionAnimation(startPoint: CGPoint, endPoint:CGPoint, beginTime: CFTimeInterval, duration: CFTimeInterval) -> CAKeyframeAnimation {
let positionAnimation = CAKeyframeAnimation(keyPath: "position")
positionAnimation.path = customPath(middlePoint: startPoint, endPoint: endPoint).cgPath
positionAnimation.isRemovedOnCompletion = false
positionAnimation.duration = duration
positionAnimation.beginTime = beginTime
positionAnimation.fillMode = CAMediaTimingFillMode.forwards
return positionAnimation
}
private func alphaAnimation(beginTime: CFTimeInterval, duration: CFTimeInterval) -> CAKeyframeAnimation {
let alphaAnimation = CAKeyframeAnimation(keyPath: "opacity")
alphaAnimation.isRemovedOnCompletion = false
alphaAnimation.fillMode = CAMediaTimingFillMode.forwards
alphaAnimation.values = [1.0, 1.0, 0.0]
alphaAnimation.keyTimes = [0.0,0.5,1.0]
alphaAnimation.duration = duration
alphaAnimation.beginTime = beginTime
return alphaAnimation
}
知道为什么它不起作用?
显然,动画不在渲染树上。即视图没有superView
。或者某个地方,它的superView
没有superView
。您可能需要检查视图实现函数是否已添加到某个地方的window
或view
。