在處理這個問題fade時CATransitionType,我注意到可能CATransition無法正常作業或損壞。其余的CATransitionType: moveIn, push,reveal作業正常。
我正在使用 iPhone 13、iOS 16.0。
過渡代碼
extension CALayer {
func makeFadeTransition() {
let transition = CATransition()
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
transition.duration = 0.5
transition.type = .fade
self.add(transition, forKey: nil)
}
}
用法
self.customView.layer.makeFadeTransition()
我知道我們可以改用UIView.animatecombine withalpha來改變不透明度
UIView.animate(withDuration: 0.15, animations: {
self.customView.alpha = 0.0
})
或使用CABasicAnimation
extension CALayer {
func makeFadeTransition() {
let transition = CABasicAnimation(keyPath: "opacity")
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
transition.duration = 0.5
transition.fromValue = 1.0
transition.toValue = 0.0
self.add(transition, forKey: nil)
}
}
但同樣,是CATransitionType型別fade壞了還是我錯了。先謝謝了。
uj5u.com熱心網友回復:
你必須做一些事情來改變圖層......
例如,要淡出/淡入,我們可以這樣做:
extension CALayer {
func makeFadeTransition() {
let transition = CATransition()
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
// let's use duration of 2.5 to make it more obvious
transition.duration = 2.5
transition.type = .fade
// change the layer... opacity, backgroundColor, frame, etc
// fade transition doesn't like opacity of 0.0, so we'll use 0.01
self.opacity = self.opacity == 1.0 ? 0.01 : 1.0
// or, for example,
// "shrink" the layer by 20-points
//self.frame = self.frame.insetBy(dx: 20.0, dy: 20.0)
self.add(transition, forKey: nil)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517503.html
標籤:IOS迅速过渡
下一篇:如何將當前畫布存盤在陣列中?
