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.
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
changeEffectcalls, like so.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:
Which could even become variadics, now that they've become more powerful:
Alternatively a function like
composed(with: )oradding(_ effect:)could be added to compose:And lastly, perhaps using
+operator:Thank you as always! Would love to hear what you think, and if any of those seem like a good idea.