Kuidas kasutada pilte sujuva silmusanimatsiooni loomiseks iOS-is

Temp mail SuperHeros
Kuidas kasutada pilte sujuva silmusanimatsiooni loomiseks iOS-is
Kuidas kasutada pilte sujuva silmusanimatsiooni loomiseks iOS-is

Kuidas panna pilved igavesti liikuma: lihtne silmusanimatsioon iOS-is

iOS-i arenduses võivad animatsioonid rakenduse tõeliselt ellu äratada, lisades dünaamilise ja kaasahaarava elemendi, mida kasutajad armastavad. 🌥️ Üks levinud animatsioon, mida võiksite luua, on sujuv silmusefekt, näiteks pilvede liigutamine üle ekraani. Seda lihtsat, kuid visuaalselt atraktiivset animatsiooni kasutatakse sageli mängudes, ilmarakendustes ja isegi isiklikes projektides, et luua rahustav õhkkond. Kui olete iOS-i animatsiooniga uustulnuk, võite mõelda, kuidas muuta see sujuvaks ja vältida tõrkeid.

Kujutage ette, et avate rakenduse ja näete kohe pilvi, mis sujuvalt üle ekraani triivivad, luues täiusliku rahuliku tausta. Seda tüüpi efekti on võimalik saavutada Swifti animatsioonide „UIImageView” ja „UIView” abil. Põhiidee on animeerida sama pilti (antud juhul pilve) mitu korda, nii et see näib pidevalt liikuvat. Siiski pole see alati nii lihtne, kui tundub. Animatsiooni sujuvaks muutmisel, eriti korduvate piltidega tegelemisel, on arendajatel mõned lõksud.

Kui olete proovinud seda efekti seadistada ja avastasite probleeme, nagu pilved liiguvad vales suunas või kaovad, pole te üksi. Need on levinud probleemid, mis tulenevad kaadri valest käsitsemisest või animatsiooni konfiguratsioonist. Kuid ärge muretsege – see juhend juhendab teid nende probleemide lahendamiseks, tagades animatsiooni tõrgeteta toimimise. Täpselt nagu minu esimene katse pilvede animeerimiseks, peate võib-olla enne täiusliku tulemuse saamist mõnda asja kohandama. 😅

Sukeldume nüüd lahendusse, et saada need pilved täiuslikus ringis liikuma. Kasutades kahte pildivaadet ja natuke animatsiooni, loote lõputu sujuva liikumise, mis hoiab teie rakenduse sujuva ja poleeritud. Kas olete valmis animatsiooni parandama ja pilved õigesti triivima? Lähme!

Käsk Kasutusnäide
UIView.animate Seda käsku kasutatakse vaadete animeerimiseks teatud aja jooksul. Sel juhul animeerib see pilvepilte, luues silmusefekti. Näide: UIView.animate(koosKestus: koguKestus, viivitus: 0,0, valikud: [.repeat, .curveLinear], animatsioonid: { ... })
frame.origin.x Raami atribuut tähistab vaate asukohta ja suurust. Originaal.x määrab konkreetselt horisontaalse asukoha. Näide: cloudsImageView1.frame.origin.x -= self.screenSize pildi vasakule liigutamiseks.
CGRect Struktuuri CGRect kasutatakse ristkülikukujulise ala määratlemiseks 2D-ruumis. Seda kasutatakse siin UIImageView algpositsiooni ja suuruse määramiseks. Näide: cloudsImageView1.frame = CGRect(x: 0, y: 100, laius: ekraani suurus, kõrgus: 100)
UIView.AnimationOptions See valik määrab, kuidas animatsioon peaks käituma. Sellised valikud nagu .repeat loovad animatsioonitsükli ja .curveLinear määrab kiiruskõvera. Näide: UIView.animate(koos kestusega: koguKestus, viivitus: 0,0, valikud: [.repeat, .curveLinear], ...)
weak self Sulgemiste puhul kasutatakse nõrka enesekindlust, et vältida säilitustsüklit, mis võib põhjustada mälulekkeid. See tagab, et vaatekontroller ei viita animatsiooni ajal tugevalt iseendale. Näide: lõpetamine: { [nõrk ise] _ eneses?.optimizeMemory() }
recycleClouds() Seda kohandatud funktsiooni kasutatakse piltide asukoha lähtestamiseks, kui need liiguvad ekraani piiridest välja, tagades pilvepiltide korduskasutamise ja sujuva tsükli. Näide: self?.recycleClouds()
UIImageView Rakenduses piltide kuvamiseks kasutatakse klassi UIImageView. Pilvepildi kuvamiseks selles animatsioonis on see ülioluline. Näide: cloudsImageView1 = UIImageView(pilt: cloudImage)
UIScreen.main.bounds Seda käsku kasutatakse seadme ekraani mõõtmete saamiseks, mis on piltide õigeks positsioneerimiseks hädavajalik. Näide: olgu screenSize = UIScreen.main.bounds.width
totalDuration See muutuja juhib animatsiooni kestust. Selle reguleerimine võib muuta animatsiooni töö kiirust või aeglast. Näide: olgu koguKestus = 20,0

Kuidas pilvanimatsiooni skript iOS-is töötab

Ülaltoodud skriptinäites on eesmärk luua sujuv ja pidev pilvanimatsioon, mis iOS-i rakenduses lõpmatult ringi liigub. Põhiidee on animeerida kaks UIImageView sama pilvepildiga eksemplare, liigutades neid horisontaalselt üle ekraani. Seda tehakse nende positsioonide reguleerimisega raami abil päritolu.x atribuut ja animatsiooni rakendamine nendele positsioonidele. Kahte pildivaadet kasutatakse nii, et kui üks liigub ekraanilt välja, on teine ​​valmis oma kohale asuma, luues sujuva silmuse efekti. Pildivaadete liikumist animeerides saate luua illusiooni, et pilved triivivad pidevalt üle taeva. 🚀

Jagame koodi põhikomponendid lahti. Esimene samm on luua kaks pildivaadet, millest igaühel on sama pilvepilt. Need pildivaated asetatakse ekraanile kõrvuti, kusjuures teine ​​pildivaade algab sealt, kus esimene lõpeb, luues pideva horisondi. See seadistus on ülioluline tagamaks, et kui esimene pildivaade jõuab ekraani servani, on teine ​​pildivaade valmis üle võtma. Pildivaadete asukohti juhitakse kasutades raami atribuut, mis määrab nii vaadete suuruse kui ka asukoha põhivaates. Iga pildivaade algab erinevast x-asendist: üks algab 0-st ja teine ​​algab ekraani laiusest.

Kui pildivaated on seadistatud, on järgmine samm nende animeerimine. Seda tehakse rakendusega UIView.animate funktsioon, mis vastutab vaadete aja jooksul animeerimise eest. The UIView.animate Funktsioon võtab mitut parameetrit: animatsiooni kestus, viivitus enne animatsiooni algust, animatsioonivalikud (nt animatsiooni kordamine) ja rakendatavate animatsioonide plokk. Sel juhul määratakse animatsiooni kestuseks 20 sekundit ja animatsioon määratakse igavesti korduma, kasutades .korda valik. The .curveLinear valik tagab, et animatsioon jookseb ühtlase kiirusega, luues sujuva, lineaarse liikumise. Pilte liigutatakse horisontaalselt, nihutades neid päritolu.x ekraani laiuse järgi.

Kood võib aga põhjustada soovimatuid tulemusi, näiteks piltide kadumist või vales suunas liikumist. Seda seetõttu, et raami atribuuti muudetakse otse ilma pilte lähtestamata, kui need ekraanilt välja liiguvad. Lahenduseks on kasutada sellist meetodit nagu RecycleClouds, mis lähtestab pildivaadete asukoha, kui need liiguvad ekraani piiridest kaugemale. See tagab, et kujutised liiguvad sujuvalt, ilma kadumata. See meetod kontrollib pildivaadete x-asendit ja kui üks liigub ekraanilt välja, lähtestatakse see teisele poole, võimaldades tsüklil jätkata. Lisaks kasutades nõrk mina lõpetamisploki sees tagab, et tugevate võrdlustsüklite tõttu ei esineks mälulekkeid, parandades rakenduse jõudlust.

Looping Cloud animatsiooni loomine iOS-is UIImageView abil

See lahendus kasutab Swifti koos UIKiti raamistikuga kahe UIImageView objekti animeerimiseks, et luua sujuva pilvanimatsiooni silmus.

import UIKit
class ViewController: UIViewController {
    var cloudsImageView1: UIImageView!
    var cloudsImageView2: UIImageView!
    let screenSize = UIScreen.main.bounds.width
    let cloudImage = UIImage(named: "cloud.png")
    override func viewDidLoad() {
        super.viewDidLoad()
        setupClouds()
        animateClouds()
    }
    func setupClouds() {
        cloudsImageView1 = UIImageView(image: cloudImage)
        cloudsImageView2 = UIImageView(image: cloudImage)
        cloudsImageView1.frame = CGRect(x: 0, y: 100, width: screenSize, height: 100)
        cloudsImageView2.frame = CGRect(x: screenSize, y: 100, width: screenSize, height: 100)
        view.addSubview(cloudsImageView1)
        view.addSubview(cloudsImageView2)
    }
    func animateClouds() {
        UIView.animate(withDuration: 20.0, delay: 0.0, options: [.repeat, .curveLinear], animations: {
            self.cloudsImageView1.frame.origin.x -= self.screenSize
            self.cloudsImageView2.frame.origin.x -= self.screenSize
        }, completion: nil)
    }
}

Pilveanimatsiooni parandamine täiustatud piltide ringlussevõtu ja suunakäsitlusega

See meetod kasutab Swifti ja UIKiti pilvepiltide silmuste haldamiseks keerukama lähenemisviisiga, kasutades kujutiste taaskasutamist, et vältida piltide kadumist ja tagades sujuva pideva animatsiooni.

import UIKit
class ViewController: UIViewController {
    var cloudsImageView1: UIImageView!
    var cloudsImageView2: UIImageView!
    let screenSize = UIScreen.main.bounds.width
    let cloudImage = UIImage(named: "cloud.png")
    override func viewDidLoad() {
        super.viewDidLoad()
        setupClouds()
        animateClouds()
    }
    func setupClouds() {
        cloudsImageView1 = UIImageView(image: cloudImage)
        cloudsImageView2 = UIImageView(image: cloudImage)
        cloudsImageView1.frame = CGRect(x: 0, y: 100, width: screenSize, height: 100)
        cloudsImageView2.frame = CGRect(x: screenSize, y: 100, width: screenSize, height: 100)
        view.addSubview(cloudsImageView1)
        view.addSubview(cloudsImageView2)
    }
    func animateClouds() {
        let totalDuration = 20.0
        let animationOptions: UIView.AnimationOptions = [.repeat, .curveLinear]
        UIView.animate(withDuration: totalDuration, delay: 0.0, options: animationOptions, animations: {
            self.cloudsImageView1.frame.origin.x -= self.screenSize
            self.cloudsImageView2.frame.origin.x -= self.screenSize
        }) { [weak self] _ in
            self?.recycleClouds()
        }
    }
    func recycleClouds() {
        if cloudsImageView1.frame.origin.x <= -screenSize {
            cloudsImageView1.frame.origin.x = screenSize
        }
        if cloudsImageView2.frame.origin.x <= -screenSize {
            cloudsImageView2.frame.origin.x = screenSize
        }
    }
}

Optimeeritud pilvanimatsioon tõhusa mälukasutusega

See lahendus täiustab eelmist näidet, kasutades mälu optimeerimise tehnikatega tõhusamat animatsioonistrateegiat, mis on eriti kasulik keerukate või suuremahuliste rakenduste puhul.

import UIKit
class ViewController: UIViewController {
    var cloudsImageView1: UIImageView!
    var cloudsImageView2: UIImageView!
    let screenSize = UIScreen.main.bounds.width
    let cloudImage = UIImage(named: "cloud.png")
    var totalDuration = 20.0
    override func viewDidLoad() {
        super.viewDidLoad()
        setupClouds()
        animateClouds()
    }
    func setupClouds() {
        cloudsImageView1 = UIImageView(image: cloudImage)
        cloudsImageView2 = UIImageView(image: cloudImage)
        cloudsImageView1.frame = CGRect(x: 0, y: 100, width: screenSize, height: 100)
        cloudsImageView2.frame = CGRect(x: screenSize, y: 100, width: screenSize, height: 100)
        view.addSubview(cloudsImageView1)
        view.addSubview(cloudsImageView2)
    }
    func animateClouds() {
        UIView.animate(withDuration: totalDuration, delay: 0.0, options: [.repeat, .curveLinear], animations: {
            self.cloudsImageView1.frame.origin.x -= self.screenSize
            self.cloudsImageView2.frame.origin.x -= self.screenSize
        }, completion: { [weak self] _ in
            self?.optimizeMemory()
        })
    }
    func optimizeMemory() {
        if cloudsImageView1.frame.origin.x <= -screenSize {
            cloudsImageView1.frame.origin.x = screenSize
        }
        if cloudsImageView2.frame.origin.x <= -screenSize {
            cloudsImageView2.frame.origin.x = screenSize
        }
    }
}

Sujuva pilvanimatsiooni loomine iOS-is

Silmuspildi animeerimine, nagu pilve triivimine iOS-i rakenduses, nõuab nii visuaalsete efektide kui ka jõudluse hoolikat kaalumist. Kui proovite saavutada ekraanil liikuvate pilvede lõputu ringi, tuleb käsitleda mõnda põhielementi: ajastus, suund ja vaadete haldamine. Üks olulisemaid tegureid animatsiooni sujuvaks muutmisel on piltide tõhus käsitlemine, et need lihtsalt ei kaoks ega takerduks. Kasutades kahte UIImageView Animatsiooni eksemplarid aitavad tagada, et pilved näivad pidevalt liikuvat isegi siis, kui üks pilt liigub ekraanilt välja ja teine ​​võtab selle asemele. Oluline on tagada, et kujutised lähtestatakse, kui need ekraani servast mööda liiguvad. Ilma selle lähtestamiseta võib animatsioon katkeda, mille tulemusel pilved kaovad või tsüklisse lüngad jäävad.

Animatsiooni teine ​​kriitiline aspekt hõlmab raam.päritolu.x atribuut, mida kasutatakse pilvepiltide asukoha juhtimiseks. Seades piltide horisontaalse asukoha erinevatesse lähtepunktidesse, saate luua lõpmatu liikumise illusiooni. Kuid tavaline probleem tekib siis, kui üks pilt liigub ekraanilt välja ja seda ei lähtestata õigesse asendisse. Õige lähenemisviis on tuvastada, kui pilt on ekraani servast mööda liikunud, ja seejärel asetada see ümber, et alustada uuesti teiselt poolt. Animatsiooniplokki kasutades saate määratleda korduva ja pideva animatsiooni, mis tagab pideva voo. Liikumise sujuvuse tagamiseks kasutage UIView.animate meetod selliste valikutega nagu .korda loopimiseks ja .curveLineaarne ühtlase kiiruse jaoks.

Lõpuks on koodi optimeerimine jõudluse ja sujuvuse tagamiseks sama oluline kui visuaalse efekti saavutamine. Peaksite minimeerima mälukasutust ja vältima tarbetuid arvutusi animatsiooni ajal. Kasutades weak self viited sulgemispõhistes animatsioonides aitavad mälulekkeid vältida, vältides säilitustsükleid. Lisaks, kui animatsioon on keeruline või vajate täiustatud tehnikaid, kaaluge selle kasutamist CADisplayLink reaalajas kaadrivärskenduste jaoks, mis pakub suuremat kontrolli animatsiooni ajastuse ja sujuvuse üle. Animatsiooni testimine erinevate ekraanisuuruste ja -suundadega on samuti ülioluline, kuna see aitab tagada, et animatsioon toimib ootuspäraselt kõigis seadmetes. 📱

Levinud küsimused ja vastused

  1. Kuidas veenduda, et pilvanimatsioon toimib õigesti?
  2. Pilveanimatsiooni loomiseks peaksite kasutama UIView.animate koos .repeat valik. See tagab, et animatsioon kordub lõputult. Veenduge, et teine ​​pildivaade oleks lünkade vältimiseks ümber paigutatud, kui esimene on ekraanilt välja nihkunud.
  3. Miks mu pilvepildid animatsiooni ajal kaovad?
  4. Probleem tekib sageli siis, kui pilte ei lähtestata pärast ekraanilt väljaviimist korralikult. Peate pildivaated ümber paigutama ekraani teisele küljele, kui need liiguvad servast mööda, kasutades frame.origin.x.
  5. Mis on parim viis pilvanimatsiooni optimeerimiseks?
  6. Pilveanimatsiooni optimeerimiseks kasutage weak self sulgurites, et vältida mälulekkeid. Lisaks veenduge, et animatsioon oleks kasutamise sujuv UIView.animate koos .curveLinear ühtlaseks kiiruseks ja .repeat pidevaks animatsiooniks.
  7. Kuidas tagada pilvepiltide sünkroonimine?
  8. Kasutades kahte pildivaadet ja animeerides mõlemat samaaegselt sama kiiruse ja kestusega, saate need sünkroonis hoida. Võite kasutada ka offsetBy meetod veendumaks, et mõlemad pildid liiguvad samas suunas ja kiirusega.
  9. Kas ma saan juhtida pilve liikumise kiirust?
  10. Jah, saate pilve liikumise kiirust reguleerida duration parameetris UIView.animate meetod. Pikema kestuse tulemuseks on aeglasem liikumine, lühem aga suurendab kiirust.
  11. Mida teha, kui ma tahan, et pilvanimatsioon töötaks kasutaja sisendi põhjal kiiremini või aeglasemalt?
  12. Animatsiooni dünaamiliseks muutmiseks kasutaja sisendi põhjal saate siduda duration animatsioonist muutujaks, mis muutub, kui kasutaja rakendusega suhtleb. See võimaldab teil kiirust reaalajas reguleerida.
  13. Kuidas panna pilvanimatsioon erineva suurusega ekraanidel tööle?
  14. Pilveanimatsiooni erinevatel ekraanisuurustel toimimiseks kasutage UIScreen.main.bounds ekraani laiuse dünaamiliseks arvutamiseks. See tagab, et pilvepildid kohandavad oma asukohti vastavalt seadme ekraani suurusele.
  15. Mis vahe on UIView.animate ja CADisplayLink?
  16. UIView.animate on sirgjoonelisem ja sobib lihtsate animatsioonide jaoks. CADisplayLink, sobib aga paremini reaalajas värskendamiseks ja pakub kaadrivärskenduste täpsemat kontrolli, muutes selle ideaalseks keerukamate animatsioonide või mängude jaoks.
  17. Kuidas vältida piltide kattumist animatsiooni ajal?
  18. Kujutiste kattumise vältimiseks veenduge, et nende laius oleks õige UIImageView on õigesti seadistatud, nii et pildid algaksid ekraani vastasservadest. Sujuva voo säilitamiseks asetage pilt ümber, kui see jõuab ekraani servani.

Animatsiooniparandused pilve sujuvaks liikumiseks

Sujuvate silmusanimatsioonide loomine iOS-is on oluline oskus rakenduste jaoks, mis nõuavad sujuvat liikumisefekte. Pilveanimatsiooni tõrgeteta toimimise võti on mõista, kuidas oma pildivaateid õigesti hallata. Kui üks pilt liigub ekraanilt välja, peate selle asukoha lähtestama ilma tsüklit katkestamata. Lihtne lahendus hõlmab UIView.animate meetodiga .korda ja .curveLinear valikud animatsiooni pidevaks ja sujuvaks hoidmiseks. 🏞️

Teine oluline aspekt silmuse loomisel on piltide positsioonide dünaamiline haldamine. Teise pilvepildi ümberpaigutamine pärast seda, kui see ekraanilt eemaldub, on lõputu liikumise illusiooni säilitamiseks ülioluline. Lisaks tagab jõudluse optimeerimine tõhusate kodeerimistavade abil, et animatsioon töötab sujuvalt erinevates seadmetes ja ekraanisuuruses, pakkudes kasutajatele sujuvat kogemust.

Allikad ja viited
  1. Annab põhjaliku juhendi silmusanimatsioonide loomise kohta iOS-is UIView.animate. Lisateavet leiate aadressilt Apple'i arendaja dokumentatsioon .
  2. Üksikasjad edasijõudnute kohta UIImageView iOS-i rakenduste käsitlemise ja tõhusate animatsioonistrateegiate kohta leiate teavet aadressilt Ray Wenderlich .
  3. Animatsiooniprobleemide (nt kaduvad pildid) tõrkeotsinguks ja parandamiseks vaadake seda õpetust aadressil Keskmine – kiire programmeerimine .