If anyone comes here for a solution. I still believe this is a bug in DragGesture but there is workaround possible though CADisplayLink. (See here: https://developer.apple.com/documentation/quartzcore/optimizing_promotion_refresh_rates_for_iphone_13_pro_and_ipad_pro)
Unfortunately, you will have to create a helper object to setup a display link, because you can't have @objc functions in structs. I created:
@available(iOS 15.0, *)
class RefreshRateHelper {
static let shared = RefreshRateHelper()
private var displayLink:CADisplayLink? = nil
init() {
displayLink = CADisplayLink(target: self, selector: #selector(ignore))
displayLink?.add(to: .current, forMode: .default)
}
@objc
func ignore(link: CADisplayLink) {
}
func preferredFrameRateRange(_ range:CAFrameRateRange){
displayLink?.preferredFrameRateRange = range
}
}
This very hacky. It basically is a globally accessible display link that you give a preferred framerate. I ended up setting a high framerate in .updating and resetting it to .default in onEnded.
I hope this helps someone.