@@ -253,6 +253,15 @@ final class MeteringTask {
253253 let settledAt = self . meteringStates [ mode] ? . settledAt ?? . now
254254 self . meteringStates [ mode] = MeteringProgress ( settledAt: settledAt)
255255 }
256+ private func onMeteringChanged( for mode: MeteringMode , isAdjusting: Bool ) {
257+ guard !isFinished else { return }
258+ if isAdjusting {
259+ self . onMeteringAdjusting ( for: mode)
260+ } else {
261+ self . onMeteringSettled ( for: mode)
262+ }
263+ self . update ( )
264+ }
256265
257266 /**
258267 * Starts metering exposure (AE) to the given `CGPoint`.
@@ -271,12 +280,9 @@ final class MeteringTask {
271280 options: [ . new]
272281 ) { [ weak self] _, _ in
273282 guard let self else { return }
274- if device. isAdjustingExposure {
275- self . onMeteringAdjusting ( for: . ae)
276- } else {
277- self . onMeteringSettled ( for: . ae)
283+ self . queue. async {
284+ self . onMeteringChanged ( for: . ae, isAdjusting: self . device. isAdjustingExposure)
278285 }
279- self . update ( )
280286 } )
281287 // Request AF to lock to the specific point
282288 self . device. exposurePointOfInterest = point
@@ -300,12 +306,9 @@ final class MeteringTask {
300306 options: [ . new]
301307 ) { [ weak self] _, _ in
302308 guard let self else { return }
303- if device. isAdjustingFocus {
304- self . onMeteringAdjusting ( for: . af)
305- } else {
306- self . onMeteringSettled ( for: . af)
309+ self . queue. async {
310+ self . onMeteringChanged ( for: . af, isAdjusting: self . device. isAdjustingFocus)
307311 }
308- self . update ( )
309312 } )
310313 // Request AF to lock to the specific point
311314 device. focusPointOfInterest = point
@@ -326,12 +329,9 @@ final class MeteringTask {
326329 options: [ . new]
327330 ) { [ weak self] _, _ in
328331 guard let self else { return }
329- if device. isAdjustingWhiteBalance {
330- self . onMeteringAdjusting ( for: . awb)
331- } else {
332- self . onMeteringSettled ( for: . awb)
332+ self . queue. async {
333+ self . onMeteringChanged ( for: . awb, isAdjusting: self . device. isAdjustingWhiteBalance)
333334 }
334- self . update ( )
335335 } )
336336 // Request AWB to focus
337337 device. whiteBalanceMode = try getWhiteBalanceMode ( responsiveness: responsiveness)
0 commit comments