Commit b6de5705 by Daniel Dahan

reworked DurationPreprocessor

parent 426a8998
...@@ -45,32 +45,49 @@ class DurationPreprocessor: MotionPreprocessor { ...@@ -45,32 +45,49 @@ class DurationPreprocessor: MotionPreprocessor {
setDurationForInfiniteDuration(views: toViews, duration: maxDuration) setDurationForInfiniteDuration(views: toViews, duration: maxDuration)
} }
func optimizedDurationFor(view: UIView) -> TimeInterval { /**
let targetState = context[view]! Retrieves the optimized duration for a given UIView.
return view.optimizedDuration(fromPosition: context.container.convert(view.layer.position, from: view.superview), - Parameter for view: A UIView.
toPosition: targetState.position, - Returns: A TimeInterval.
size: targetState.size, */
transform: targetState.transform) func optimizedDuration(for view: UIView) -> TimeInterval {
} let v = context[view]!
return view.optimizedDuration(fromPosition: context.container.convert(view.layer.position, from: view.superview),
toPosition: v.position,
size: v.size,
transform: v.transform)
}
func applyOptimizedDurationIfNoDuration(views: [UIView]) -> TimeInterval { /**
var maxDuration: TimeInterval = 0 Applies the optimized duration for an Array of UIViews.
for view in views where context[view] != nil { - Parameter views: An Array of UIViews.
if context[view]?.duration == nil { - Returns: A TimeInterval.
context[view]!.duration = optimizedDurationFor(view: view) */
} func applyOptimizedDurationIfNoDuration(views: [UIView]) -> TimeInterval {
if context[view]!.duration! == .infinity { var d: TimeInterval = 0
maxDuration = max(maxDuration, optimizedDurationFor(view: view))
} else { for v in views where nil != context[v] {
maxDuration = max(maxDuration, context[view]!.duration!) if nil == context[v]?.duration {
} context[v]!.duration = optimizedDuration(for: v)
}
d = .infinity == context[v]!.duration! ?
max(d, optimizedDuration(for: v)) :
max(d, context[v]!.duration!)
}
return d
} }
return maxDuration
}
func setDurationForInfiniteDuration(views: [UIView], duration: TimeInterval) { /**
for view in views where context[view]?.duration == .infinity { Sets the duration if the duration of a transition is set to `.infinity`.
context[view]!.duration = duration - Parameter views: An Array of UIViews.
- Parameter duration: A TimeInterval.
*/
func setDurationForInfiniteDuration(views: [UIView], duration: TimeInterval) {
for v in views where .infinity == context[v]?.duration {
context[v]!.duration = duration
}
} }
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment