Swift animations, NSAttributedString |
Bienvenue invité ( Connexion | Inscription )
Swift animations, NSAttributedString |
11 Sep 2019, 08:52
Message
#1
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 659 Inscrit : 7 May 2015 Membre no 195 224 |
Bonjour,
Je cherche à faire une petite application. N'ayant aucune notion pour créer une interface graphique en C, je me suis lancé dans les outils que propose Apple, à savoir Swift/XCode Y'a pas à dire, la syntaxe de leur language est SUPER lourdingue ! Bref. J'avances pas à pas et j'aimerais maintenant animer une portion de texte d'un UILabel (une syllabe) Dans l'idéal, je voudrais :
Voilà ce que j'ai écrit : Dans ma classe qui contient ces UILabel, je définis mes couleurs et mes modifications de textes (je passe par une fonction car je n'ai pas trouvé comment faire une ombre dans la déclaration) : Code let colors = [ "unreaded": UIColor(red: 66/255, green: 66/255, blue: 66/255, alpha: 1), "readed": UIColor(red: 233/255, green: 128/255, blue: 43/255, alpha: 1) ] var readedStyle :[NSAttributedString.Key : Any] = [:] func defStyles(size :textSize) { self.readedStyle[NSAttributedString.Key.foregroundColor] = self.colors["readed"] let shadow = NSShadow() shadow.shadowOffset = CGSize(width: 2, height: 2) shadow.shadowColor = UIColor.darkGray shadow.shadowBlurRadius = 2 self.readedStyle[NSAttributedString.Key.shadow] = shadow } Ensuite, j'ai ajouté une extension à la classe UILabel : Code extension UILabel { // startPos : // endPos : // style : list of styles to apply to range func posTextStyleChange (endPos :Int, startPos: Int, style :[NSAttributedString.Key : Any]) { // Change text color to <style> between <startPos> and <endPos> let range = NSRange(location: startPos, length: endPos-startPos) let attribute = NSMutableAttributedString.init(string: self.text!) //attribute.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.yellow, range: range) attribute.addAttributes(style, range: range) self.attributedText = attribute UIView.animate(withDuration: 0.2, delay: 0, usingSpringWithDamping: 0.2, initialSpringVelocity: 5, options: [.autoreverse, .curveEaseInOut], animations: { () -> Void in self.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) }, completion: { (result: Bool) -> Void in self.transform = .identity }) } } Evidemment, dans ce code, mon animation s'applique à tout le UILabel. Je ne vois pas comment je pourrais ne l'appliquer qu'à une partie. Si vous coonnaissez une solution, je suis tout ouïe. En revanche, je ne comprends pas du tout pourquoi l'ombre ne fonctionne pas du tout comme prévu :
Une idée ? Merci pour votre aide Ce message a été modifié par Anard - 11 Sep 2019, 09:14. -------------------- "iMack" : GA-H97M-D3H, Intel i5 4460, 16Go DDR3,
"Portable" : HP Pavilion DV3500, Intel core2 T6400, 4Go DDR3, NVidia GeForce 9300M, HDD 256Go / Grub2 - Gentoo-Xfce |
|
|
18 Sep 2019, 10:23
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 |
Non, tu peux aujourd'hui utiliser Mojave pour t'entrainer à SwiftUI, mais le produit fini aura besoin de Catalina ou IOS 13. Je crains que tu doive garder SwiftUI sous le coude car c'est le futur, mais ce n'est pas ce qui permet de supporter une base large de clients. Le dilemme est créé volontairement par les constructeurs qui cherchent à capturer le maximum de part.s de marché.
L'interface Builder est en fin de vie avec SwiftUI qui ne l'utilise plus, donc n'investit pas trop dessus. Idem pour Xcode : Si tu t'appuies dessus pour la facilité d'ajouter une cible, tu aurais intérêt à te concentrer tout de suite sur le mécanisme du build et de la gestion du multiplateforme en général. Sans analyse trop poussée, il me semble que tu es dans un cas typique où il faut coller à un standard comme ECMAscript (the language formally known as JavaScript ) et un environnement basé sur Nodejs, comme AngularJS. Pour compliquer, beaucoup d'outils "transpilent" en JavaScript. Des langages de plus haut niveau, fortement typés, qui sont ensuite traduits, transpilés, en JS. Choix des outils : https://www.dunebook.com/angular-ide/ Et Swift n'y échappe pas https://github.com/shift-js/shift-js Il existe des API de streaming du MIDI comme https://github.com/mmckegg/web-midi A propos de MIDI over Bluetooth, on voit quelques démos sur YT : https://www.youtube.com/watch?v=eKnC9_Buxus Les choses bougent à toute vitesse, et l'outillage est de plus en plus abondant. Et n'oublie pas de regarder aussi des avancées de l'IA dans le domaine créatif, ça aussi ça avance à toute vitesse, et si tu as besoin de la puissance de calcul d'un GPU dans un format Raspberry Pi, il y a NVIDIA Jetson Nano, mais attention, c'est encore très "vert", tout ce qui tourne sous Linux, n'est pas forcément opérationnel sur ces nouveaux processeurs. Bon courage, beau projet, tiens bon ! @+JP |
|
|
Nous sommes le : 23rd April 2024 - 21:16 |