Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b435de87a2 |
@@ -834,9 +834,13 @@ public class LCManager: NSObject, UIGestureRecognizerDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
let consolePiPPanner_frameRateRequest = FrameRateRequest()
|
||||
|
||||
@objc func consolePiPPanner(recognizer: UIPanGestureRecognizer) {
|
||||
|
||||
if recognizer.state == .began {
|
||||
consolePiPPanner_frameRateRequest.isActive = true
|
||||
|
||||
initialViewLocation = consoleView.center
|
||||
}
|
||||
|
||||
@@ -861,6 +865,9 @@ public class LCManager: NSObject, UIGestureRecognizerDelegate {
|
||||
|
||||
case .ended, .cancelled:
|
||||
|
||||
consolePiPPanner_frameRateRequest.isActive = true
|
||||
FrameRateRequest().perform(duration: 0.5)
|
||||
|
||||
// After the PiP is thrown, determine the best corner and re-target it there.
|
||||
let decelerationRate = UIScrollView.DecelerationRate.normal.rawValue
|
||||
|
||||
@@ -1115,3 +1122,53 @@ extension TimeInterval {
|
||||
fileprivate func _debugPrint(_ items: Any) {
|
||||
print(items)
|
||||
}
|
||||
|
||||
// MARK: Frame Rate Request
|
||||
/**
|
||||
An object that allows you to manually request an increased display refresh rate on ProMotion devices.
|
||||
|
||||
*The display refresh rate does not exceed 60 Hz when low power mode is enabled.*
|
||||
|
||||
**Do not set an excessive duration. Doing so will negatively impact battery life.**
|
||||
|
||||
```
|
||||
// Example
|
||||
let request = FrameRateRequest(preferredFrameRate: 120,
|
||||
duration: 0.4)
|
||||
request.perform()
|
||||
```
|
||||
*/
|
||||
class FrameRateRequest {
|
||||
|
||||
lazy private var displayLink = CADisplayLink(target: self, selector: #selector(dummyFunction))
|
||||
|
||||
var isActive: Bool = false {
|
||||
didSet {
|
||||
guard #available(iOS 15, *) else { return }
|
||||
guard isActive != oldValue else { return }
|
||||
|
||||
if isActive {
|
||||
displayLink.add(to: .current, forMode: .common)
|
||||
} else {
|
||||
displayLink.remove(from: .current, forMode: .common)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Prepares your frame rate request parameters.
|
||||
init(preferredFrameRate: Float = Float(UIScreen.main.maximumFramesPerSecond)) {
|
||||
if #available(iOS 15, *) {
|
||||
displayLink.preferredFrameRateRange = CAFrameRateRange(minimum: 30, maximum: Float(UIScreen.main.maximumFramesPerSecond), preferred: preferredFrameRate)
|
||||
}
|
||||
}
|
||||
|
||||
/// Perform frame rate request.
|
||||
func perform(duration: Double) {
|
||||
isActive = true
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + duration) { [self] in
|
||||
isActive = false
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func dummyFunction() {}
|
||||
}
|
||||
|
||||
@@ -115,6 +115,8 @@ class ResizeController {
|
||||
// Ensure initial autolayout is performed unanimated.
|
||||
LCManager.shared.consoleWindow?.layoutIfNeeded()
|
||||
|
||||
FrameRateRequest().perform(duration: 1.5)
|
||||
|
||||
if isActive {
|
||||
|
||||
UIViewPropertyAnimator(duration: 0.75, dampingRatio: 1) {
|
||||
@@ -201,6 +203,8 @@ class ResizeController {
|
||||
static let kMinConsoleHeight: CGFloat = 108
|
||||
static let kMaxConsoleHeight: CGFloat = 346
|
||||
|
||||
let verticalPanner_frameRateRequest = FrameRateRequest()
|
||||
|
||||
@objc func verticalPanner(recognizer: UIPanGestureRecognizer) {
|
||||
|
||||
let translation = recognizer.translation(in: bottomGrabber.superview)
|
||||
@@ -210,6 +214,8 @@ class ResizeController {
|
||||
|
||||
switch recognizer.state {
|
||||
case .began:
|
||||
verticalPanner_frameRateRequest.isActive = true
|
||||
|
||||
initialHeight = LCManager.shared.consoleSize.height
|
||||
|
||||
UIViewPropertyAnimator(duration: 0.4, dampingRatio: 1) { [self] in
|
||||
@@ -241,6 +247,10 @@ class ResizeController {
|
||||
LCManager.shared.consoleView.center.y = consoleCenterPoint.y
|
||||
|
||||
case .ended, .cancelled:
|
||||
verticalPanner_frameRateRequest.isActive = false
|
||||
|
||||
FrameRateRequest().perform(duration: 0.4)
|
||||
|
||||
UIViewPropertyAnimator(duration: 0.4, dampingRatio: 0.7) {
|
||||
if LCManager.shared.consoleSize.height > maxHeight {
|
||||
LCManager.shared.consoleSize.height = maxHeight
|
||||
@@ -270,6 +280,8 @@ class ResizeController {
|
||||
static let kMinConsoleWidth: CGFloat = 112
|
||||
static let kMaxConsoleWidth: CGFloat = UIScreen.portraitSize.width - 56
|
||||
|
||||
let horizontalPanner_frameRateRequest = FrameRateRequest()
|
||||
|
||||
@objc func horizontalPanner(recognizer: UIPanGestureRecognizer) {
|
||||
|
||||
let translation = recognizer.translation(in: bottomGrabber.superview)
|
||||
@@ -279,6 +291,8 @@ class ResizeController {
|
||||
|
||||
switch recognizer.state {
|
||||
case .began:
|
||||
horizontalPanner_frameRateRequest.isActive = true
|
||||
|
||||
initialWidth = LCManager.shared.consoleSize.width
|
||||
|
||||
UIViewPropertyAnimator(duration: 0.4, dampingRatio: 1) { [self] in
|
||||
@@ -310,6 +324,10 @@ class ResizeController {
|
||||
|
||||
case .ended, .cancelled:
|
||||
|
||||
horizontalPanner_frameRateRequest.isActive = false
|
||||
|
||||
FrameRateRequest().perform(duration: 0.4)
|
||||
|
||||
UIViewPropertyAnimator(duration: 0.4, dampingRatio: 0.7) {
|
||||
if LCManager.shared.consoleSize.width > maxWidth {
|
||||
LCManager.shared.consoleSize.width = maxWidth
|
||||
|
||||
Reference in New Issue
Block a user