mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-10 06:41:11 +00:00
Storage improvements
This commit is contained in:
@@ -34,6 +34,47 @@ private let completionKey = "CAAnimationUtils_completion"
|
||||
public let kCAMediaTimingFunctionSpring = "CAAnimationUtilsSpringCurve"
|
||||
public let kCAMediaTimingFunctionCustomSpringPrefix = "CAAnimationUtilsSpringCustomCurve"
|
||||
|
||||
private final class FrameRangeContext {
|
||||
private var animationCount: Int = 0
|
||||
private var displayLink: CADisplayLink?
|
||||
|
||||
init() {
|
||||
}
|
||||
|
||||
func add() {
|
||||
self.animationCount += 1
|
||||
self.update()
|
||||
}
|
||||
|
||||
func remove() {
|
||||
self.animationCount -= 1
|
||||
if self.animationCount < 0 {
|
||||
self.animationCount = 0
|
||||
assertionFailure()
|
||||
}
|
||||
self.update()
|
||||
}
|
||||
|
||||
@objc func displayEvent() {
|
||||
}
|
||||
|
||||
private func update() {
|
||||
if self.animationCount != 0 {
|
||||
if self.displayLink == nil {
|
||||
let displayLink = CADisplayLink(target: self, selector: #selector(self.displayEvent))
|
||||
self.displayLink = displayLink
|
||||
displayLink.add(to: .main, forMode: .common)
|
||||
displayLink.isPaused = false
|
||||
}
|
||||
} else if let displayLink = self.displayLink {
|
||||
self.displayLink = nil
|
||||
displayLink.invalidate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private let frameRangeContext = FrameRangeContext()
|
||||
|
||||
public extension CAAnimation {
|
||||
var completion: ((Bool) -> Void)? {
|
||||
get {
|
||||
@@ -56,7 +97,7 @@ private func adjustFrameRate(animation: CAAnimation) {
|
||||
if #available(iOS 15.0, *) {
|
||||
let maxFps = Float(UIScreen.main.maximumFramesPerSecond)
|
||||
if maxFps > 61.0 {
|
||||
animation.preferredFrameRateRange = CAFrameRateRange(minimum: maxFps, maximum: maxFps, preferred: maxFps)
|
||||
animation.preferredFrameRateRange = CAFrameRateRange(minimum: 60.0, maximum: maxFps, preferred: maxFps)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,6 +217,8 @@ public extension CALayer {
|
||||
animationGroup.delegate = CALayerAnimationDelegate(animation: animationGroup, completion: completion)
|
||||
}
|
||||
|
||||
adjustFrameRate(animation: animationGroup)
|
||||
|
||||
self.add(animationGroup, forKey: key)
|
||||
}
|
||||
|
||||
|
||||
@@ -81,16 +81,12 @@ public final class ConstantDisplayLinkAnimator {
|
||||
guard let displayLink = self.displayLink else {
|
||||
return
|
||||
}
|
||||
if #available(iOS 10.0, *) {
|
||||
let preferredFramesPerSecond: Int
|
||||
if self.frameInterval == 1 {
|
||||
preferredFramesPerSecond = 60
|
||||
} else {
|
||||
preferredFramesPerSecond = 30
|
||||
if self.frameInterval == 1 {
|
||||
if #available(iOS 15.0, *) {
|
||||
self.displayLink?.preferredFrameRateRange = CAFrameRateRange(minimum: 60.0, maximum: 120.0, preferred: 120.0)
|
||||
}
|
||||
displayLink.preferredFramesPerSecond = preferredFramesPerSecond
|
||||
} else {
|
||||
displayLink.frameInterval = self.frameInterval
|
||||
displayLink.preferredFramesPerSecond = 30
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user