Cum dezactivați efectul paralax. Efect Parallax în aplicațiile iOS

O altă notă informativă va viza paralaxa, care a apărut împreună cu a șaptea versiune a iOS. În acest articol, vom încerca să răspundem la întrebările principale care îi preocupă pe utilizator. Deci, ce este acest tapet panoramic și cum să setați un tapet dinamic, cum să dezactivați efectul paralax?

Imagini panoramice în „șapte”

Imaginile panoramice erau deja prezente în prima versiune beta a iOS 7. Această caracteristică a făcut posibilă setarea panoramelor mari ca tapet pe ecranul de start sau pe ecranul de blocare. După instalare, utilizatorul și-a putut transforma gadgetul iOS 7 în mâini, iar fotografia s-a mutat pe ecran în funcție de unghiul în care a fost transformat smartphone-ul sau tableta.

În al șaselea beta, din anumite motive, a eliminat un astfel de efect de pe iOS 7. De aceea, iOS 7 pur original nu are o astfel de funcție ca panoramele. Desigur, veți fi surprins și veți întreba: „Unde sunt?” Au fost înlocuite cu efectul paralax. Desigur, puteți pune panorame, dar nu veți vedea același efect care a fost prezent în iOS 7 beta 1.

Efect paralel

Acum să aruncăm o privire asupra paralaxului. Aceasta este o mare inovație care permite pictogramelor și imaginilor de fundal pe ecranul de origine să trăiască o viață separată una de cealaltă. Tapetul este într-un plan, iar pictogramele sunt în altul. Gadgetul de pe iOS 7 citește informații de la giroscop și mișcă aceste două planuri unele față de altele, astfel încât, ca urmare a mișcării, vedem acele părți ale imaginii care au fost anterior „în spatele scenei”. Datorită acestor manipulări, utilizatorul are un sentiment de profunzime și multidimensionalitate.

Când am explicat care este efectul paralax și cum funcționează în iOS 7, devine clar că definiții precum „Imagini de fundal panoramice” sau „Imagini de fundal Parallax” sunt înșelătoare pentru utilizatori. Într-adevăr, din punctul de vedere al înțelegerii procesului și a limbii ruse, acestea sunt funcții diferite, de fapt, sunt exact aceeași acțiune. Așa-numitele "Imagini de fundal panoramice" nu sunt decât simple fotografii care diferă de alte imagini doar în rezoluția lor.

Pentru a obține astfel de „imagini de fundal panoramice”, utilizatorii vor trebui să salveze orice fotografie în rezoluția dorită, apoi să o încarce pe tableta, smartphone sau playerul iOS. Dacă nu faceți acest lucru sau nu puneți o fotografie care a fost utilizată în a șasea versiune a sistemului de operare, atunci poate apărea un defect neplăcut cu întinderea.

Rezoluții foto, dacă doriți să obțineți un efect de paralax pe ecranul de lucru (între paranteze am indicat rezoluția standard recomandată pentru fotografii fără paralax din a șasea versiune a iOS):

  • Tableta IPad 2 - 1424 x 1424 (1024 x 1024)
  • IPad Mini - 1424 x 1424 (1024 x 1024)
  • Aypad 3 - 2448 x 2448 (2048 x 2048)
  • IPad 4 - 2448 x 2448 (2048 x 2048)
  • IPhone 4S - 1360 x 1040 (960 x 640)
  • IPhone 5, 5S, 5C -1536 la 1040 (1136 x 640)
  • IPod a 5-a generație - 1536 de 1040 (1136 x 640)
  • IPhone 4 - nu acceptă paralaxa (960 x 640)

Deja acum, mulți oameni se angajează să creeze diverse colecții cu astfel de screensavere, există chiar și aplicații „Protecții de ecran dinamice și paralaxe” prin care puteți descărca imagini noi. Dar acum știm că totul este mai simplu decât pare. Astfel de aplicații sunt doar o altă încercare de a reduce banii.

Cum să faci singuri imagini cu acest efect?

Puteți face totul cu un editor de imagini. Cea mai populară opțiune este, desigur, Photoshop. Principalul lucru care trebuie făcut este să alegeți rezoluția corectă pentru gadgetul dvs. (mai sus am scris toate permisiunile pentru toate dispozitivele) După ce aveți o imagine cu rezoluția dorită, va trebui să o încărcați pe dispozitivul dvs. într-unul din aceste moduri:

  1. Trimiteți-vă poza prin e-mail, apoi salvați-o în film;
  2. Încărcați în Dropbox și salvați din nou în galeria foto;
  3. Descărcați în conformitate cu schema standard prin iTunes.
Cum pot opri paralaxa?

Unii utilizatori nu le place această inovație. Îl puteți dezactiva în setări. Setări, apoi Basic, apoi Acces Universal, apoi Reduceți mișcarea. Faceți clic pe comutatorul „Reduceți mișcarea” - apăsând pe acesta puteți dezactiva prallax.

Imagini dinamice

În actualizările iOS 7, au apărut fotografii dinamice. Imagini dinamice pot fi setate în setări. Mergem la Setări, acolo găsim fila „Tapet și luminozitate”, apoi găsim acolo „Selecție tapet” - Dinamic. Imaginile dinamice diferă unele de altele doar în culori. În acest moment, Apple oferă doar 7 opțiuni. Imaginile dinamice permit elementelor tapetului să mute / schimbe transparența / scăderea în timp real.

Poate cel mai important sfat este să nu faceți upgrade la iOS 10 dacă aveți un iPhone sau iPad vechi. Deși, de când citiți acest articol, este prea târziu să vă oferim astfel de sfaturi. Dar nu disperați, există și alte metode dovedite!

Dă iOS 10 timp

Noul iOS este la pachet cu diverse funcții care încep indexarea datelor după lansarea inițială și consumă o cantitate mare de resurse. De exemplu, galeria încorporată vă scanează toate fotografiile, detectând fețele și poate provoca încetinirea și scăderea răspunsului sistemului.

Pentru a vă salva nervii, trebuie doar să acordați timp iOS pentru a finaliza toate procesele după lansarea inițială. Acest lucru durează de obicei aproximativ opt ore, așa că este convenabil să vă actualizați seara și să lăsați iPhone-ul sau iPad-ul singur peste noapte. Dimineața veți observa că sistemul este mai rapid.

Dezactivează efectul paralax

În iOS 10, există și mai multe animații care încarcă semnificativ procesoarele iPhone și iPad, în special în dispozitivele mai vechi. Dacă pictogramele de pe desktop nu se mișcă atunci când înclinați smartphone-ul sau tableta, aveți foarte puțin de pierdut. Dar totul se va deschide mult mai repede.

„Setări” → „General” → „Accesibilitate” → „Reduceți mișcarea”

Comutatorul de comutare de care avem nevoie este ascuns în profunzimea setărilor. Facem clic și ne bucurăm.

Reduceți transparența interfeței

Un alt efect de decorare. Există multe elemente semi-transparente în interfața iOS 10, de la dock la diverse pop-up-uri. Dacă o dezactivați, toată această frumusețe cu efecte de sticlă înghețată va fi înlocuită de substraturi gri aspre, dar nu va irosi resurse suplimentare la redare.


„Setări” → „General” → „Accesibilitate” → „Creșterea contrastului” → „Reduce transparența”

Comutatorul de comutare a opacității se află în secțiunea Creștere contrast, lângă Scădere mișcare.

Dezactivați actualizarea aplicației de fundal

Actualizarea datelor în fundal este un lucru util, dar cele trei secunde de așteptare pentru un feed pentru Twitter sau Facebook merită încărcarea suplimentară a procesorului pe dispozitivul iOS, care deja se chinuie să facă față? În plus, este de asemenea o încărcare pe baterie, lipsindu-vă de câteva minute de viață a bateriei.


„Setări” → „General” → „Actualizare conținut”

În setări există o întreagă secțiune cu o listă a tuturor aplicațiilor instalate. Trebuie să mergeți acolo și să vă asigurați că întrerupătoarele de comutare sunt activate doar în fața aplicațiilor cu adevărat necesare. Mai bine, dezactivează complet actualizarea.

Eliberați spațiul de depozitare

Probabil știți că iOS uneori se comportă ciudat atunci când există puțin spațiu liber pe disc. iOS 10 nu face excepție: dacă stocarea iPhone-ului sau iPad-ului este plină, sistemul începe să încetinească.


„Setări” → „General” → „Utilizarea stocării și a iCloud”

Aruncați o privire la statisticile de utilizare și faceți un audit. Este recomandabil să ai cel puțin 1 GB de spațiu liber. Dacă dezinstalarea aplicațiilor nu dă rezultatele dorite, utilizați curățarea.

Reporniți iPhone-ul sau iPad-ul

Dacă nu ați făcut-o deja, asigurați-vă că reporniți dispozitivul iOS. După activare, fișierele temporare, memoria cache și alte lucruri care pot încetini sistemul sunt eliminate. Un iOS 10 proaspăt instalat va avea o mulțime de aceste junk, deci nu vă lăsați prea lene să reporniți și să eliminați toate inutile.


apple.com

Pentru a reporni, trebuie să apăsați și mențineți simultan butonul Acasă și butonul de pornire până când ecranul devine alb și apare logo-ul Apple. În mod alternativ, puteți pur și simplu să dezactivați iPhone-ul sau iPad-ul. Efectul va fi similar.

Ideea utilizării paralajei în proiectarea aplicațiilor mobile nu este nouă. Ca mulți alții, ea a venit la noi din lumea designului web, unde la început a devenit o direcție foarte comună. Parallax conferă designului un efect de profunzime impresionant și un volum aparent. Până acum, din cauza unor inconveniente asociate cu specificul dezvoltării de aplicații web, moda paralajei în proiectarea site-urilor a dispărut. Cu toate acestea, aplicațiile mobile sunt cu totul altfel de poveste. Parallaxul în designul mobil este activ și nu va merge nicăieri și este adăugat în mod implicit la proiectarea noului iOS 7 !

În acest articol, vă vom spune despre componenta noastră DVParallaxView și vom demonstra, folosind dispozitivul său ca exemplu, cum să adăugați exact același efect de paralax la aplicație ca în ecranul de pornire în iOS 7. Și chiar mai bine.

Cum funcționează paralaxa?

Haideți să ne îndrumăm o vreme în lumea aspră a fizicii pentru a înțelege și a structura mai bine mecanismul efectului de paralax pentru noi înșine. Aceasta ne va ajuta să o reproducem fidel pe ecranul telefonului.

Deci, cum funcționează paralaxia? Esența sa este destul de simplă. Parallaxul este o schimbare în poziția aceluiași obiect privit din două puncte diferite în spațiu. Puteți observa acest efect în lumea reală oricând. Tot ce ai nevoie este ceva mare pentru a acționa ca fundal (de exemplu, peretele unei case) și un obiect observat pe acest fundal, care este mai aproape de tine decât fundalul (de exemplu, o lampă sau un copac). Dacă mergeți de-a lungul peretelui în timp ce urmăriți lampa, vi se va părea că lampa se schimbă relativ la perete. Acest efect se numește paralax - deplasarea aparentă a coloanei în raport cu peretele atunci când mutați punctul de observare, adică voi. În acest caz, cu cât postul este mai aproape de dvs., cu atât va părea viteza de deplasare a acesteia. În schimb, dacă vă îndepărtați de stâlp pentru o distanță considerabilă și încercați să mergeți din nou de-a lungul peretelui casei, postul practic nu se va mișca în raport cu peretele. Ochii noștri sunt obișnuiți să aprecieze distanța față de obiecte în multe feluri, iar unul dintre ei este viteza relativă a deplasării obiectului. Dacă observi o scenă în care obiectele se mișcă cu viteze diferite în timp ce te miști, ochii îți spun imediat creierului că obiectele sunt la distanțe diferite față de tine. Acesta este apelul la utilizarea paralajei în design - prin simularea acestuia, vei adăuga adâncime unei scene plate.

Deci, într-un sens practic pentru noi, efectul de paralax este acela că obiectele situate la distanțe diferite de tine se mișcă în raport cu tine la viteze diferite. Mai mult, această viteză este invers legată de distanța dvs. de obiecte. Dacă sunteți aproape - viteza obiectului este mare, dacă este departe - invers.

Să evidențiem principalele componente ale acestui efect. În primul rând, pentru o paralaxă pronunțată, este de dorit să existe un fundal, în mod ideal staționar, sau a cărui deplasare va fi neglijabilă în comparație cu alte obiecte. În al doilea rând, paralaxa poate fi observată numai atunci când există obiecte care umplu spațiul dintre fundal și punctul de observare. Iar cel mai important lucru în aceste obiecte este diferența dintre distanța lor față de tine. Cu alte cuvinte, obiectele ar trebui să formeze un fel de ierarhie, aliniate la distanțe diferite de la punct de vedere la fundal. Și, în sfârșit, în al treilea rând, paralaxia este imposibilă fără mișcarea obiectelor în raport cu punctul de observare cu viteze diferite.

Cu toate cele trei puncte principale - fundal, obiecte și mișcare relativă - vom observa paralaxa.

Defilare Parallax

Acum că știm cum funcționează paralaxa, trebuie să decidem cât de exact îl vom implementa în cod.

Cea mai evidentă abordare a implementării paralajei este defilarea paralaxului. Jucat jocuri vechi de platformă? Dacă da, atunci îți vei aminti cel mai probabil că, în timp ce personajul se desfășura de la capătul stâng al nivelului spre dreapta, obiectele din fundal se deplasau în direcția opusă la viteze diferite, în funcție de distanța preconizată de la prim-plan. Iată un link către Wikipedia, astfel încât să vă amintiți exact despre ce vorbim.

Defilarea Parallax în jocuri a fost proiectată astfel încât scena pe care o vedeți pe ecran să fie compusă din mai multe straturi pe care sunt amplasate obiecte. În funcție de distanța estimată a stratului față de ecran (stratul „pădure” este mai aproape de tine decât stratul „nori”, care este mai aproape de tine decât stratul „soare”), straturile sunt deplasate cu o viteză sau alta. Acest lucru conferă o anumită adâncime ceea ce se întâmplă pe ecran, făcând o imagine plană să pară mai voluminoasă. Desigur, această abordare se potrivește destul de bine cu ceea ce am învățat despre paralax. Într-adevăr, puteți împărți mental spațiul dintre dvs. și fundal în straturi care conțin obiecte din acest spațiu.

Este logic să presupunem că implementarea efectului paralax ar trebui să fie încapsulată într-un anumit container-component care conține alte componente și are o anumită ierarhie de vizualizări, a cărei poziție se va deplasa cu o distanță în funcție de poziția din ierarhie. Să ne gândim la asta, există un element în UIKit care conține deja o caracteristică similară? Desigur, au! Orice UIView conține o ierarhie a altor UIView-uri introduse în el prin metoda addSubview:.

Aici am ajuns la ideea principală din spatele componentei DVParallaxView. Ideea este ca componenta să fie descendentă a UIView, încapsulând efectul de paralax. Efectul în sine va fi implementat prin trecerea unei noi valori la proprietatea contentOffset de tip CGPoint. Astfel, DVParallaxView este similar în sensul UIScrollView. Când schimbăm valoarea contentOffset, vom schimba poziția fiecărei vizualizări care se află în ierarhia DVParallaxView. Cantitatea de compensare va fi inversă legată de distanța elementului de la „partea de sus” a ierarhiei. Și având în vedere că elementele din tabloul de subviziuni sunt stocate începând de la cea mai mică din ierarhie (adică de la cel mai îndepărtat de la ecran), compensarea va fi în proporție directă cu indicele elementului procesat în timpul unei treceri directe prin tablou. În acest fel, interpretăm prezența „distanței” între elemente, ca în lumea reală. Pentru a controla valoarea distanței, vom afișa în interfața externă o proprietate care este un multiplicator prin care va fi înmulțit indexul unui element din tablou. Setând-o, puteți regla întotdeauna valoarea paralaxului așa cum doriți.

Ei bine, modelul propus pare viabil, toate punctele principale sunt gândite. Aici putem pune capăt cunoașterii noastre cu dispozitivul conceptual de paralax în DVParallaxView și să începem o poveste despre implementarea sa practică.

Creați DVParallaxView

În acest capitol și în următoarele capitole, vom analiza mai atent crearea componentei DVParallaxView.

Înainte de a trece direct la implementare, să definim câteva proprietăți ale clasei DVParallaxView.

În primul rând, paralaxia arată cel mai bine și se face cel mai adesea pe fundalul unei imagini frumoase (nu uitați, am decis că una dintre componentele obligatorii ale paralajei este fundalul?). Prin urmare, în clasa noastră, este necesar să oferim capacitatea de a seta o imagine de fundal. La baza rădăcinii ierarhiei de vizualizare, va exista întotdeauna un element privat al clasei UIImageView, pe care îl vom numi backgroundImageView. Acest element va acționa ca fundal în DVParallaxView. Locația sa la rădăcina ierarhiei ne va garanta cea mai mică compensare relativă, după cum se potrivește fundalului, cel mai îndepărtat obiect din scenă. Pentru a transfera imaginea de fundal, interfața publică a componentei va avea o proprietate specială - backgroundImage al clasei UIImage.

În al doilea rând, efectul de paralax în iOS 7 nu se referă doar la deplasarea de fundal. Dacă aruncați o privire mai atentă, veți observa un detaliu curios: pictogramele sunt deplasate în direcția opusă deplasării fundalului. Acest lucru este realizat pentru a îmbunătăți efectul de paralax și contrastul între fundalul schimbător și pictogramele aplicației, care la prima vedere sunt staționare. Întrucât ne-am propus să preluăm și să depășim paralaxa în iOS 7, trebuie doar să adăugăm o astfel de caracteristică componentei noastre. Pentru a face acest lucru, vom crea o proprietate frontView în interfața publică, în care vom transfera vizualizarea pe care dorim să o schimbăm în direcția opusă paralaxului.

Deci, toate preparatele au fost făcute - teoria a fost studiată, dispozitivul componentei a fost gândit. Puteți începe crearea DVParallaxView. Gata?

Creați un proiect cu o singură vizualizare în Xcode, dați-i un nume și orice alte atribute necesare. În cadrul proiectului, creați o clasă DVParallaxView care este descendentă a clasei UIView. Creați un fișier antet DVParallaxView și completați-l după cum urmează.

#import @interface DVParallaxView: UIView @property (nonatomic, puternic) UIImage * backgroundImage; @property (nonatomic, puternic) UIView * frontView; @property (nonatomic) float paralaxDistanceFactor; @property (nonatomic) float paralaxFrontFactor; @property (nonatomic) conținut CGPointOffset; @Sfârșit

Toate proprietățile clasei pe care le vedeți aici au fost deja discutate mai sus, așa că setul lor nu ar trebui să vă surprindă cu nimic. Două proprietăți care nu au fost discutate în mod explicit anterior - parallaxDistanceFactor și parallaxFrontFactor - sunt însăși factorii care servesc la controlul cantității de compensare, respectiv, a elementelor ierarhiei și a vizualizării frontale.

În fișierul de implementare a clasei, creați o interfață privată. Trebuie să introduceți proprietatea backgroundImageView, deoarece clasa nu trebuie să ofere acces public la ea.

@interface DVParallaxView () @property (nonatomic, puternic) UIImageView * backgroundImageView; @Sfârșit

Să fie creat obiectul clasei apelând la metoda initWithFrame:. În apelul său, trebuie să efectuați toată configurația inițială.

- (id) initWithFrame: (CGRect) cadru (self \u003d; if (self) (self.parallaxDistanceFactor \u003d 2.f; self.parallaxFrontFactor \u003d 20.f; self.backgroundColor \u003d ;; UIPanGestureRecognizer * panRecognizer \u003d [initWithTarget: self action : @selector (panHandler :)] ;;) returnați;)

Setăm aceste valori multiplicatoare pe baza preferințelor noastre personale. Puteți alege alte valori dacă paralaxa vi se pare prea puternică sau, dimpotrivă, prea slabă. Rețineți că fundalul este de la bun început în ierarhia de vizualizare, chiar dacă nu este specificată nicio imagine pentru aceasta.

Dacă ați pus deja întrebarea „Cum vom iniția deplasarea vizualizărilor într-o componentă?”, Puteți vedea deja răspunsul la acesta în codul inițiatorului - UIPanGestureRecognizer. Da, ne amintim că în iOS 7, paralaxa a fost cauzată de înclinarea telefonului. Toate la timpul lor.

Selectorul de metode panHandler: a fost trecut la UIPanGestureRecognizer. Să scriem această metodă imediat, astfel încât să nu uităm să o facem mai târziu.

#pragma mark - Gesture gesture - (void) panHandler: (UIPanGestureRecognizer *) pan (traducere CGPoint \u003d ;;;)

Nimic neobișnuit. Citim mișcarea atingerii și setăm aceeași valoare de compensare la DVParallaxView. Nu uitați să zero zero compensarea rezultată la sfârșit.

Acum vine partea distractivă. Până acum, nu se întâmplă nimic pentru a schimba conținutOffset, să remediem asta. Creați o metodă setter setContentOffset așa cum se arată mai jos.

- (void) setContentOffset: (CGPoint) contentOffset (BOOL backgroundReachedEdgeX \u003d NU; BOOL backgroundReachedEdgeY \u003d NU; double contentDivider; // 1 if (self.backgroundImageView) (contentDivider \u003d self.subviews.count * self.parallaxDistanceFactorer CG (self.backgroundImageView.center.x + (contentOffset.x - _contentOffset.x) / contentDivider, self.backgroundImageView.center.y - (contentOffset.y - _contentOffset.y) / contentDivider); if (newCenter.x - self .backgroundImageView.frame.size.width / 2.f)\u003e 0.f || (newCenter.x + self.backgroundImageView.frame.size.width / 2.f)< self.bounds.size.width) { newCenter.x = self.backgroundImageView.center.x; backgroundReachedEdgeX = YES; } if ((newCenter.y - self.backgroundImageView.frame.size.height/2.f) > 0,f || (newCenter.y + self.backgroundImageView.frame.size.height / 2.f)< self.bounds.size.height) { newCenter.y = self.backgroundImageView.center.y; backgroundReachedEdgeY = YES; } self.backgroundImageView.center = newCenter; } // //2 for (int i = 1; i

Deci, să analizăm mai detaliat metoda. Variabilele backgroundReachedEdgeX și backgroundReachedEdgeY servesc pentru a semnala că am ajuns la marginea imaginii prin compensarea fundalului. Dacă fundalul este setat, atunci are sens să verificăm dacă am depășit fundalul Imagine. La urma urmei, nu dorim ca utilizatorii să contemple „tăierea” imaginii, aceasta pare nefirească. Prin urmare, am considerat necesară limitarea zonei de paralaxă la dimensiunea imaginii de fundal, dacă este cazul. Astfel, blocul // 1 conține o verificare pentru a ieși în afara imaginii.

Blocul // 2 este o plimbare prin toate elementele ierarhiei de vedere cu calculul valorilor deplasării centrelor lor în funcție de poziția lor în ierarhie. De asemenea, dacă ne aflăm la marginea imaginii de fundal de-a lungul axelor X sau Y, atunci nu va exista deplasare de-a lungul acestor axe.

Principala logică de compensare este creată, nu mai rămâne mult - pentru a seta metode de accesorizare pentru principalele proprietăți și, de asemenea, pentru a supraîncărca metoda addSubview.

#pragma mark - Getters - (UIImageView *) backgroundImageView (if (!! _backgroundImageView) (_backgroundImageView \u003d [init]; _backgroundImageView.contentMode \u003d UIViewContentModeCenter; _backgroundImageView.center \u003d CGPointMake (CIM) ;) return _backgroundImageView;) #pragma mark - Setters - (void) setParallaxDistanceFactor: (float) parallaxDistanceFactor (_parallaxDistanceFactor \u003d MAX (0.f, parallaxDistanceFactor);) - (void) setParallaxFrontFactor;) - (void) setParallaxFrontFactor; .f, parallaxFrontFactor);) - (void) setBackgroundImage: (UIImage *) backgroundImage (_backgroundImage \u003d backgroundImage ;; CGPoint origine \u003d CGPointMake (CGRectGetMidX (self.bounds) - backgroundImage.size.width / 2.f, CGRectGet) limite) - backgroundImage.size.height / 2.f); self.backgroundImageView.frame \u003d (CGRect) (. origine \u003d origine, .size \u003d backgroundImage.size);) - (void) setFrontView: (UIView *) frontView ( _frontView \u003d frontView; ; ) #pragma mark - Overriding - (void) addSubview: (UIView *) view (if (self.frontView); else;)

Hai să mergem în ordine. Cu ajutorul getter-ului pentru fundalImageView, totul este clar - o instantanee leneșă obișnuită, creăm un obiect doar dacă este necesar. Setarea valorilor ParallaxDistanceFactor și ParallaxFrontFactor va verifica automat valorile negative. Seterul pentru backgroundImage stabilește imaginea de fundal în backgroundImageView și, în același timp, își centrează poziția pe ecran. Seterul frontView adaugă în același timp frontView la ierarhia subview, deci nu are sens să o adăugați manual. În cele din urmă, metoda addSubview supraîncărcată funcționează ca de obicei, dacă frontView nu este definit în DVParallaxView, dar dacă este definit, atunci orice vizualizare va fi o poziție sub ea în ierarhie. Presupune că frontView este întotdeauna înainte.

Să ne bazăm pe acest moment și să trecem la ViewController-ul principal al proiectului nostru de testare. Este timpul să conectăm noua noastră componentă și să o testăm în acțiune. Din moment ce dorim să arătăm ca noul ecran de acasă în iOS 7, în proiectul de testare vom încerca să-l recreăm. Pentru a face acest lucru, avem nevoie de o imagine de fundal (de preferință cu o imagine a spațiului) și de pictograme ale aplicației. Mai mult, deoarece componenta noastră acceptă și alte obiecte între fundal și prim plan, le vom adăuga și noi. Deoarece fundalul este spațiu, atunci vom dezvolta o temă spațială și vom reînvia ușor spațiul deșertului cu planeta Pământ și satelitul său - Luna. Puteți găsi toate imaginile necesare pe internet sau le puteți ridica din proiectul nostru de testare pe github.

În iOS 7, pictogramele aplicației sunt prim-planul, așa că în DVParallaxView trebuie să le plasăm în frontView. Pentru a face acest lucru, vom crea un UIView, în care vom pune toate pictogramele. Pentru a nu fi necesar să creați și să plasați manual toate aceste componente, creați un container și pictograme în storyboard, apoi conectați-le la controller.

Așa arată aspectul frontal în aplicația noastră de testare. Legați containerul UIView ca un IBOutlet la controler și denumiți-l frontView. Să trecem la crearea unei instanțe DVParallaxView.

Creați o proprietate parallaxView în interfața privată a controlorului. Creați un getter pentru această proprietate.

- (DVParallaxView *) parallaxView (if (! _ParallaxView) (_parallaxView \u003d [initWithFrame: self.view.bounds]; \u003d CGPointMake (CGRectGetMidX (self.view.bounds) - earth.image.size.width / 2.f, CGRectGetMidY (self.view.bounds) - earth.image.size.height / 2.f), .size \u003d earth .frame.size); [_parallaxView addSubview: earth]; UIImageView * moon \u003d [initWithImage:]; moon.frame \u003d (CGRect) (.origin \u003d CGPointMake (CGRectGetMidX (self.view.bounds)) + 30.f, CGRectGetMidY ( self.view.bounds) + 30.f), .size \u003d moon.frame.size); [_parallaxView addSubview: moon]; [_parallaxView setFrontView: self.frontView];) return _parallaxView;)

Codul arată cum, după crearea unei instanțe a clasei DVParallaxView, i se atribuie fundalul „galaxy2”, apoi se adaugă imagini ale Pământului și ale Lunii în ierarhia de vizualizare. Apoi, proprietatea frontView este setată ca prim plan. Acum tot ce trebuie să facem este să adăugăm componenta noastră în ierarhia de vizualizare a controlorului. Adăugați această linie la metoda viewDidLoad:

;

Parallax este gata, puteți începe proiectul. După cum vedeți, componenta pe care am creat-o deja în această etapă a dezvoltării sale oferă un efect de paralax complet fiabil.

A mai rămas un singur detaliu. Până acum, elementele în mișcare se realizează prin atingere. Este timpul să rezolvi asta. Este timpul să conectați un giroscop la DVParallaxView.

Conectarea mișcării core

Dacă ați citit articolul nostru, aveți deja toate abilitățile necesare pentru a utiliza un giroscop în acest proiect și știți, de asemenea, că pentru a conecta un giroscop, trebuie să adăugați cadrul Core Motion la proiect. Dar cum vom folosi exact datele senzorului? În proiectul nostru, am ales rotationRate pentru a indica înclinarea telefonului. Adică, contentOffset se va schimba dacă există o rată unghiulară de rotație non-zero.

Conectați cadrul la fișierul de implementare a clasei DVParallaxView.

#import

Apoi, creați proprietăți motionManager și displayLink în interfața privată a clasei.

@property (nonatomic, puternic) CMMotionManager * motionManager;

@property (nonatomic, puternic) CADisplayLink * displayLink;

CMMotionManager este clasa principală CoreMotion folosită pentru accesarea datelor de la senzori. CADisplayLink este un cronometru care funcționează cu rata de actualizare a ecranului, care va apela la metoda pentru actualizarea datelor de la giroscop.

Acum să adăugăm metode de accesor pentru noile proprietăți.

- (CADisplayLink *) displayLink (dacă (! _DisplayLink) (_displayLink \u003d;) return _displayLink;) - (CMMotionManager *) motionManager (if (! _MotionManager) (_motionManager \u003d [init]; _motionManager.deviceMotionUpion) ;)

Evident, un dezvoltator care utilizează componenta DVParallaxView nu trebuie să folosească întotdeauna un giroscop. Pot fi alte condiții și acțiuni pentru modificarea valorii contentOffset. Prin urmare, componenta ar trebui să ofere posibilitatea de a alege dacă controlează sau nu paralaxia prin giroscop. Pentru a oferi această alegere, vom afișa proprietatea gyroscopeControl în interfața publică, care va fi de tip BOOL. Dacă este setat pe DA, componenta începe să citească citirile giroscopului și afișează ierarhia atunci când dispozitivul este înclinat. Dacă este setat pe NO, atunci componenta nu mai răspunde la modificările vitezei unghiulare a dispozitivului. În același timp, proprietățile motionManager și displayLink ar trebui să își oprească activitatea pentru a nu pierde resursele procesorului.

După cum am convenit, creați o proprietate gyroscopeControl în interfața publică.

@property (nonatomic, puternic) giroscopul BOOL;

Apoi creați un setter pentru acesta.

- (void) setGyroscopeControl: (BOOL) gyroscopeControl (if (_gyroscopeControl \u003d\u003d gyroscopeControl) return; _gyroscopeControl \u003d gyroscopeControl; if (gyroscopeControl) (; forMode: NSDefaultRunLoop);

Rețineți că atunci când proprietatea este setată pe YES, motionManager începe să primească lecturi de la deviceMotion, nu de la giroscop. Motivele acestei alegeri sunt descrise în detaliu în articol. Când este setat pe NO, achiziția de date este oprită, displayLink este eliminat din toate firele apelând la metoda de invalidare, iar MotionManager în sine este setat pe nul.

Acum trebuie doar să scriem o metodă de conversie a datelor de la giroscop în date pentru contentOffset, precum și să implementăm metoda displayLinkHandler, denumită în cronometrul displayLink.

#pragma mark - Gyroscope to offset - (CGPoint) contentOffsetWithRotationRate: (CMRotationRate) rotationRate (double xOffset \u003d (fabs (rotationRate.y)\u003e DV_ROTATION_THRESHOLD)? rotationRate.y * DV_ROTATION_MULTIPLIER: 0.f; double fabs x)\u003e DV_ROTATION_THRESHOLD)? rotationRate.x * DV_ROTATION_MULTIPLIER: 0.f; CGPoint newOffset \u003d CGPointMake (self.contentOffset.x + xOffset, self.contentOffset.y + yOffset); return newOffset;) - (void) )

Nu uitați chiar de la începutul fișierului de implementare pentru a descrie cele două constante definite pe care le-am folosit în metoda de transformare.

#define DV_ROTATION_THRESHOLD 0.1f

#define DV_ROTATION_MULTIPLIER 2.5f

În clasa controlerului, atunci când creați un obiect DVParallaxView, setați proprietatea gyroscopeControl pe YES.

Așadar, giroscopul este conectat, datele din acesta ar trebui acum convertite corect într-o compensare. Acum puteți compila proiectul și îl puteți rula pe dispozitiv. Arată grozav, nu-i așa? Rețineți că giroscopul va funcționa doar pe un dispozitiv real.

Concluzie

Dacă citiți acest paragraf, atunci tocmai ați creat o componentă separată cu efect de paralax, ca în iOS 7. Și chiar mai mult - efectul în componenta DVParallaxView este mai complet, deoarece schimbă nu numai fundalul și prim-planul, ci și întreaga ierarhie a elementelor între lor. După cum puteți vedea, dispozitivul său nu a fost deloc complicat.

DVParallaxView a fost creat de noi pentru utilizare gratuită și postat în depozitul nostru. Folosește, îmbunătățește, așteptăm sugestiile tale!

Să încercăm să răspundem la întrebările arzătoare pe care cititorii le pun și le pun în comentarii. Și suntem fericiți să le răspundem.

Vom începe cu imagini de fundal panoramice în iOS 7. Sau mai degrabă, cu absența lor ...

Imagini de fundal panoramice în iOS 7

Imagini de fundal panoramice au apărut în iOS 7 beta 1. Această funcție a permis setarea fotografiilor panoramice (exemple de panorame sunt pe forumul nostru) ca tapet pe desktop sau pe ecranul de blocare. Utilizatorii au transformat dispozitivul iOS 7 în mâini, iar fotografia s-a mutat pe ecran în funcție de unghiul în care se află dispozitivul în acest moment.

În iOS 7 beta 6, din anumite motive, Apple a eliminat această funcționalitate din firmware. De aceea în versiunea finală a iOS 7.0 nu există Nicio funcție „Wallpaper panoramic”!

Desigur, puteți seta panoramele în loc de imagini de fundal. Sistemul vă va permite să faceți acest lucru, dar nu va produce efectul „tocmai”. Veți vedea doar efectul Parallax.

Efect Parallax în iOS 7

Efect paralel - o inovație frumoasă în iOS 7. Efectul Parallax permite imagini de fundal și pictograme de pe desktop să existe ca și cum ar fi separat unele de altele. Icoanele sunt într-un plan, iar imaginile de fundal sunt în altul. Dispozitivul iOS 7 citește datele de la giroscop și mișcă aceste avioane unul față de celălalt. În urma mișcărilor, vedem acele părți ale tapetului care au rămas în culise. Există un sentiment de multidimensionalitate și profunzime.

Acum, după ce am explicat cum funcționează efectul paralax în iOS 7, devine evident că concepte precum „Tapet Parallax” sau „Tapet cu efect paralax” din punctul de vedere al limbii ruse și înțelegerea procesului, sunt eronate și doar utilizatorii induc în eroare. Așa-numitele "imagini de fundal Parallax" nu sunt altceva decât imagini de fundal obișnuite standard, care diferă doar în rezoluție.

Este suficient să salvați fotografia în rezoluția dorită, să o încărcați pe iPad, iPhone sau iPod Touch și va avea efectul de paralax în iOS 7. Dacă nu faceți acest lucru sau utilizați tapetul creat pentru iOS 6, atunci unul neplăcut efect de întindere a imaginii din cauza căruia mulți dintre cititorii noștri nu puteau dormi bine.

Rezoluții instantanee dacă doriți efect de paralax în tapet (între paranteze este rezoluția standard recomandată pentru instantanee fără efect de paralax în iOS 6 și mai jos):

iPad 21424 x 1424 (1024 x 1024)

iPad mini1424 x 1424 (1024 x 1024)

iPad 32448 x 2448 (2048 x 2048)

iPad 42448 x 2448 (2048 x 2048)

iPhone 4S1360 x 1040 (960 x 640)

iPhone 5, 5S, 5C1536 - 1040 (1136 x 640)

iPod Touch 5Gen1536 - 1040 (1136 x 640)

iPhone 4nu suportă efectul de paralax (960 x 640)

Tovarășii întreprinzători deja colecționează colecții de imagini de fundal paralax speciale cu potențial și principal și chiar creează astfel de aplicații. Dar tu și cu mine știm acum că totul este mai ușor decât pare și că această aplicație este doar o încercare de a reduce banii rapid pe un val de ignoranță.

Cum să faceți tapet singur?

Este foarte ușor să faceți tapet singur, chiar și cu efect de paralax, chiar și fără acesta.

Site-ul nostru a avut îndelung instrucțiuni pas cu pas, folosind Photoshop ca exemplu - Cum se face tapet pentru iPad. Instrucțiunea nu și-a pierdut relevanța acum. Principalul lucru este să alegeți rezoluția corectă pentru dispozitivul dvs. (rezoluția recomandată este puțin mai mare în acest articol).

După ce imaginea a fost creată în rezoluția dorită, puteți:

1) trimite-ți-o prin poștă și apoi salvează-l la film

Cum dezactivați efectul Parallax în iOS 7?

Unii utilizatori nu le place efectul paralax. Îl puteți dezactiva în setări.

Setări-\u003e General-\u003e Acces universal-\u003e Reduceți mișcarea. Porniți comutatorul „Reduceți mișcarea”.

Imagini de fundal dinamice în iOS 7

IOS 7 introduce imagini de fundal dinamice încorporate în sistem. Unii le numesc „live” sau „dinamice”. Dar Apple a spus Dynamic, ceea ce înseamnă că vom rămâne la terminologia oficială.

Le puteți instala în setări ( Setări-\u003e Tapet și luminozitate-\u003e Selecție fundal-\u003e Dinamic). În funcție de tip, imagini de fundal dinamice diferă unele de altele doar în funcție de culoare. Acum există 7 culori din care să alegeți.

Pe toate imaginile de fundal, bile se mișcă / scad / cresc / schimbă transparența în timp real (toată lumea știe deja despre dragostea de Apple a mingilor).

Proprietate unică imagini de fundal dinamice pentru iOS 7 nu pot fi făcute oficial acum! Folosește ce ai. În viitor, vor exista modalități de a seta propriul tapet dinamic.

După lansarea incredibilului de popular, potrivit unor tovarăși, iOS 7, alți tovarăși au început să se simtă amețiți. Fie din succes, fie din vârtej pe ecranul iPhone. Într-adevăr, uneori poke-poke în meniu cu degetul, iar el se răsucește, dar el nu poate face nimic, fie telefonul în sine nu înțelege ce i se cere, fie majoritatea utilizatorilor spun cu adevărat adevărul: noul efect de paralax nu intervine decât cu normalul. muncă. Și întrebarea este - cum să dezactivezi toate aceste efecte ale pâlpâirilor, răsucirii, apropierii, târârii, coliziunii, într-un cuvânt - toate aceste frumuseți în plus?

Aș dori să notez că orice efecte grafice suplimentare au un efect foarte vizibil asupra bateriei iPhone-ului, pentru a le efectua puteri suplimentare, foarte grave ale dispozitivului. Astfel, oprirea tuturor acestor gunoiuri va crește durata de viață a bateriei. În cazul iPhone, chiar și un minut suplimentar este uneori esențial, nu? Privind cum scurg procentele de încărcare a bateriei, uneori vreau să plâng.

Deci, oprește-l!

1. Setări iOS -\u003e General

2. De bază -\u003e Accesibilitate

3. Acces universal -\u003e Reduceți mișcarea

4. Reduceți mișcarea -\u003e glisorul spre dreapta