-
Notifications
You must be signed in to change notification settings - Fork 174
Description
I've recently found myself combining multiple effects, for example haptics and sounds or more complex effects like spinning and jumping an element at the same time.
I do this by adding two changeEffect calls, like so.
.changeEffect([.feedback(hapticImpact: .medium)], value: self.hasAnimated)
.changeEffect([.feedback(SoundEffect(url: SoundEffect.plinkSound))], value: self.hasAnimated)The more effects I wish to chain together the longer the code grows, and the more call-sites I need to change grow the more I tweak the animation.
Instead I'd like to propose a few options that could work, as syntax that takes two modifiers and chains them together.
The simplest is an array:
.changeEffect([.feedback(hapticImpact: .medium), .feedback(SoundEffect(url: SoundEffect.plinkSound))], value: self.hasAnimated)Which could even become variadics, now that they've become more powerful:
.changeEffect(.feedback(hapticImpact: .medium), .feedback(SoundEffect(url: SoundEffect.plinkSound)), value: self.hasAnimated)Alternatively a function like composed(with: ) or adding(_ effect:) could be added to compose:
.changeEffect(.feedback(hapticImpact: .medium).composed(with: .feedback(SoundEffect(url: SoundEffect.plinkSound))), value: self.hasAnimated)And lastly, perhaps using + operator:
.changeEffect(.feedback(hapticImpact: .medium) + .feedback(SoundEffect(url: SoundEffect.plinkSound)), value: self.hasAnimated)Thank you as always! Would love to hear what you think, and if any of those seem like a good idea.