Tematica de personalizare este o modalitate foarte bună de a iesi în App Store, dar nu este întotdeauna ușor de realizat. Acest tutorial vă va învăța câteva trucuri de personalizare de bază UIKit care vă vor ajuta să distingeți aplicațiile și să creați mai multe experiențe memorabile pentru utilizatori.
Dacă ați petrecut ceva timp în jurul documentației online a Apple în iOS Dev Center, atunci cu siguranță ați fost familiarizați cu Ghidul Interfață umană infamă (denumit mai întâi "HIG"). Acest document furnizează dezvoltatorilor și proiectanților aplicațiilor iOS indicații privind modul în care utilizatorii se așteaptă să interacționeze cu Apps pe platforma iOS, exemple comune de utilizare și principiile UI / UX generale care urmează.
Deși există numeroase moduri de personalizare a apariției propriului App iOS - de la schimbarea culorilor și dimensiunilor la rularea propriilor elemente UI - este considerată cea mai bună practică să urmați HIG și sugestiile sale pentru a oferi o interfață concisă și utilizabilă.
Având în vedere acest lucru, să aruncăm o privire în câteva moduri pe care le putem face doar în timp ce personalizăm interfața noastră pentru a se potrivi cu o temă vizuală mai unică.
Majoritatea dezvoltatorilor iOS sunt familiarizați cu atributele comune ale clasei UIView care sunt ușor de schimbat, cum ar fi culoarea de fundal, dimensiunea fontului sau opacitatea. Dar, uneori, ajustarea acestor proprietăți nu ne face să obținem rezultatul de care avem nevoie.
Deci, pentru a demonstra mai multe tehnici personalizate de personalizare, vom lucra la o aplicație simplă de vizualizare a fotografiilor. Aplicația va arăta astfel fără nicio personalizare și apoi cu modificările pe care le vom efectua:
Înainte de a începe, veți avea nevoie de câteva imagini pe care le puteți descărca aici.
De asemenea, am creat aplicația de bază pe care o vom folosi, pe care o puteți descărca aici. Nu trebuie să vă faceți griji cu privire la toate lucrările pregătitoare; hai să începem să customizăm!
Cu aplicația noastră prep, avem câteva componente de bază:
Vom începe prin a face ca fundalul să arate mai puțin clasic, stabilind o imagine de fundal. Pentru a face acest lucru, să adăugăm o metodă în clasa noastră "MTViewController" numită "-setupUI".
Vom adăuga această metodă chiar sub declarațiile @synthesize.
- (void) setupUI
Acum, trebuie să adăugăm fișierul de imagine de fundal pentru proiectul nostru, astfel că obțineți fișierul "BG-pattern.png" din resursele pe care le-ați descărcat cu doar un minut în urmă și trageți-l în aplicația noastră. Am creat un nou grup pentru imaginile UI numite "UI Graphics".
Cu imaginea în loc, putem intra în această metodă "setupUI", și trebuie să adăugăm doar o singură linie:
[self.view setBackgroundColor: [Culoarea UICcolorWithPatternImage: [UIImage imageNamed: @ "BG-pattern.png"]]];
Pentru a face această schimbare live în aplicația noastră, va trebui să apelați metoda noastră "setupUI" din metoda "viewDidLoad" a ViewController. Am adăugat deja câteva apeluri la metoda "viewDidLoad", astfel încât să putem adăuga acest lucru la început:
- (void) viewDidLoad // configurați elementele personalizate ale UI [self setupUI]; // construiți matrice pentru imagini și titluri [self setupData]; // începe aplicația cu primul segment selectat [self didChangeSegmentControl: aSegmentControl]; [super viewDidLoad]; // Efectuați orice setare suplimentară după încărcarea vizualizării, de obicei de la o pensă.
Acum, să facem ca imaginea noastră să iasă în evidență, adăugând o margine albă în jurul ei. Pentru a face acest lucru, vom lucra cu CALayers, ceea ce înseamnă că trebuie să includem mai întâi cadrul QuartzCore în proiectul nostru.
Așa că mergeți la proiectul nostru UIKitDemo și vom selecta țintă (UIKitDemo). Apoi vom trece la fila intitulată "Faza de construire" și vom afișa secțiunea "Legătură binară cu biblioteci".
În partea de jos, faceți clic pe butonul "+" și alegeți "QuartzCore.framework".
În cele din urmă, trebuie să #import
Cuarț în ViewController (MTViewController.m).
#import
Cu Quartz în loc, putem începe să fiddling cu sublimele anImageView. Vom adăuga următoarele în metoda "setupUI" pentru a adăuga chenarul din jurul ImageView:
[anImageView.layer setBorderWidth: 5.0f]; [anImageView.layer setBorderColor: [[UICoror alb Culoare] CGColor]];
Dacă construim și executăm aplicația noastră acum, putem vedea o graniță îngustă în jurul imaginii noastre ImageView.
Acum, pentru a face ca imaginea noastră să scape chiar mai mult, putem pune o umbră subtilă în spatele ei folosind metode similare:
[anImageView.layer setShadowRadius: 5.0f]; [anImageView.layer setShadowOpacitate: .85f]; [anImageView.layer setShadowOffset: CGSizeMake (1.0f, 2.0f)]; [anImageView.layer setShadowColor: [[UICcolor negruColor] CGColor]]; [anImageView.layer setShouldRasterize: YES]; [anImageView.layer setMasksToBounds: NU];
Câteva dintre aceste comenzi nu sunt imediat evidente cu privire la funcția lor, așa că ne vom uita la acele linii de linie:
[anImageView.layer setShadowRadius: 5.0f];
Începem să stabilim cantitatea de "neclaritate" pe care o va avea umbra noastră.
[anImageView.layer setShadowOffset: CGSizeMake (1.0f, 2.0f)];
Apoi, vom crea o compensare pentru umbra noastră, astfel încât să nu fie doar în spatele imaginii noastre.
[anImageView.layer setShouldRasterize: YES];
Această comandă va ajuta la performanță, deoarece vă asigură că umbra este desenată o dată și apoi salvată ca bitmap, evitând necesitatea ca aplicația să deseneze din nou stratul transparent transparent al procesorului.
[anImageView.layer setMasksToBounds: NU];
În cele din urmă, vrem să ne asigurăm că nu ne tăiem umbra, deoarece se răspândește dincolo de limitele noastre originale.
Încercați să rulați din nou aplicația și veți vedea o umbra frumoasă în spatele imaginii noastre.
Avem o mulțime de margini dură, așa că haideți să ne înmoaie interfața făcând ca UILabelul nostru (aLabel) să aibă colțuri rotunjite.
Putem face acest lucru în aceeași metodă "setupUI", sub particularizările UIImageView. Tot ce avem nevoie este o linie simplă pentru a face acest lucru:
[aLabel.layer setCornerRadius: 15.0f];
Acum, schimbarea finală a metodei "setupUI" va roti ușor UIImageView, ceea ce va descompune sentimentul "pătrat" al restului aspectului.
Putem face acest lucru cu încă două linii în partea de jos a metodei "setupUI":
Transformare CGAffineTransform = CGAffineTransformMakeRotation (.03f); anImageView.transform = transformă;
Și asta este pentru "setupUI" nostru. Nu prea rău pentru doar câteva linii de cod, corect?
Odată cu lansarea iOS 5 a apărut un nou protocol pentru subclasele UIViews numite "appearance". Acest protocol ne permite să modificăm anumite aspecte ale componentelor noastre UIKit standard cum ne place - cum ar fi setarea imaginilor de fundal personalizate, umbre, efecte de culoare și multe altele.
Un exemplu simplu este UINavigationBar. Acum putem seta imagini personalizate pentru a schimba barele noastre UINavigation pentru a se potrivi cu temele aplicației noastre fără nici un fel de hassle:
[[UINavigationBar aspect] setBackgroundImage: navBarImage forBarMetrics: UIBarMetricsDefault];
În acest caz, avem un UIImage numit "navBarImage", pe care îl setăm ca imagine prestabilită pentru UINavigationBar. Apelul "appearance" va afecta clasa UINavigationBar, nu doar o singură instanță. Aceasta înseamnă că modificările noastre vor fi aplicate tuturor barelor UINavigation pe care le folosim în această aplicație.
Pentru a implementa această modificare în proiectul nostru actual de vizualizare a fotografiilor, trebuie să mergem la clasa AppDelegate (MTAppDelegate). Mergem la AppDelegate deoarece dorim ca schimbarea noastră să afecteze toate exemplele de UINavigationBars din aplicația noastră, astfel încât pentru a ne asigura că modificările sunt făcute, le vom implementa imediat după deschiderea aplicației.
Să începem prin adăugarea metodei la clasa noastră "MTAppDelegate" chiar după ce ne @sintetiza
declarații, la fel ca în clasa noastră "MTViewController":
- (void) setupUI
Acum, vom importa imaginea noastră "navBar.png" (din dosarul de resurse imagine pe care l-ați descărcat mai devreme).
Apoi, putem crea instanța UIImage pe care o vom folosi pentru fundalul nostru:
UIImage * navBarImage = [UIImage imageNamed: @ "navBar.png"];
Iar imediat după aceasta, putem face apelul nostru "înfățișării":
[[UINavigationBar aspect] setBackgroundImage: navBarImage forBarMetrics: UIBarMetricsDefault];
Înainte ca această modificare să fie activă, trebuie să apelăm metoda noastră "setupUI" din aplicare: didFinishLaunchingWithOptions:
metodă.
- (BOOL) aplicație: (UIApplication *) cerere didFinishLaunchingWithOptions: (NSDictionary *) launchOptions [self setupUI]; ...
Îți poți rula aplicația acum - nu știu fundalul întunecat în nostru UINavigationBar
în vârf.
Pentru următorul truc, lucrurile devin puțin mai complicate. Vom seta imagini personalizate pentru UISegmentedControl. Partea dificilă aici este că nu avem de-a face doar cu una sau două imagini de fundal, ci trebuie să lucrăm cu anumite secțiuni de imagini; cum ar fi capetele rotunjite, secțiunile de mijloc selectate sau neselectate, linia de divizare dintre două segmente etc.
În primul rând, dacă nu ați făcut-o deja, importați imaginile rămase în dosarul de resurse imagine descărcat.
La fel ca UINavigationBar pe care am modificat-o acum un minut, trebuie să facem două lucruri pentru a ne modifica verificarea UISegmented.
Nu am timp suficient pentru a descompune fiecare dintre aceste acțiuni pas cu pas, dar mă voi adresa câteva dintre cele mai importante într-un minut. Pentru moment, adăugați următorul cod la metoda "setupUI":
UIImage * segmentSelected = [[UIImage imageNamed: @ "segcontrol_sel.png"] resizableImageWithCapInsets: UIEdgeInsetsMake (0, 15, 0, 15)]; UIImage * segmentUnselected = [[UIImage imageNamed: @ "segcontrol_uns.png"] resizableImageWithCapInsets: UIEdgeInsetsMake (0, 15, 0, 15)]; UIImage * segmentSelectedUnselected = [UIImage imageNamed: @ "segcontrol_sel-uns.png"]; UIImage * segUnselectedSelected = [UIImage imageNamed: @ "segcontrol_uns-sel.png"]; UIImage * segmentUnselectedUnselected = [UIImage imageNamed: @ "segcontrol_uns-uns.png"];
Acest lucru creează UIImages și efectuează redimensionarea, după caz. Veți observa acest pic:
resizableImageWithCapInsets: UIEdgeInsetsMake (0, 15, 0, 15)
Acest lucru ne permite să "culturăm" în mod esențial fișierul nostru imagine prin tăierea lui în anumite margini. În acest caz, părăsim partea superioară ca atare, deplasându-ne 15 pct. Din stânga, lăsând partea inferioară așa cum este și mutând 15 pct. Din partea dreaptă. Asta ne lasa cu sectiunea de mijloc care se va extinde la latura necesara, dar capetele rotunjite vor ramane aceleasi -.
Pentru mai multe informații despre "resizableImageWithCapInsets:", consultați documentația oficială Apple.
Cu imaginile noastre dimensionate și gata, putem seta diferitele stări ale UISegmentedControl. Fiecare dintre cele cinci imagini pe care tocmai le-am adăugat va avea o stare corespunzătoare:
[[UISegmentedControl appearance] setBackgroundImage: segmentUnselected forState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; [[Aspectul UISegmentedControl] setBackgroundImage: segmentSelected forState: UIControlStateSelected barMetrics: UIBarMetricsDefault]; [[UISegmentedControl appearance] setDividerImage: segmentUnselectedUnselected forLeftSegmentState: UIControlStateNormal dreaptaSegmentState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; [[Aspectul UISegmentedControl] setDividerImage: segmentSelectedUnselected forLeftSegmentState: UIControlStateSelected rightSegmentState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; [[UISegmentedControl appearance] setDividerImage: segUnselectedSelected forLeftSegmentState: UIControlStateNormal dreaptaSegmentState: UIControlStateSelected barMetrics: UIBarMetricsDefault];
Spre deosebire de un UIButton simplu, care este în esență fie selectat, sau nu, UISegmentedControl poate verifica, de asemenea, care este statul pe fiecare parte a segmentului curent, dar nu este prea complexă după ce ne-am atârna de el.
Cu noile caracteristici din iOS 5 și o lucrare creativă cu Quartz, putem să ne aprecieză rapid și ușor Aplicațiile ca să le arătăm la fel cum ne place. Unele provocări care se prezintă cu personalizarea UI sunt:
Poate fi relativ ușor să găsești o grafică bună și există o mulțime de designeri buni acolo dispuși să ajute. Poate fi uneori mai greu să păstrați accentul pe "de ce" și nu doar pe "cum" personalizarea UI. Pentru a cita fictivul dr. Ian Malcolm Parcul Jurassic:
[Aceștia] erau atât de preocupați de faptul că ei puteau să nu se oprească să se gândească dacă ar trebui.
Ca întotdeauna, ieșiți, încercați lucruri noi, reglați setările și explorați multe alte moduri în care puteți personaliza interfețele iOS!