Elemente de arhitectură aplicație IOS

Elemente pe care le descopăr în App Programming Guide for iOS și care consider că sunt relevante pentru dezvoltarea unei aplicații:

1. tabul Info -> Custom iOS Target Properties -> Application uses Wi-Fi trecut pe TRUE.Necesar dacă aplicația comunică cun un server. Poate fi setat și din cod.

2. Application life cycle – nu insist acum pe cele cinci stări ci pe metodele care permit tranziția între stări. Aceste metode definesc cine intră în scenă atunci când rulez o aplicație:

application:willFinishLaunchingWithOptions: — execută pentru prima oară cod în aplicație după lansare

application:didFinishLaunchingWithOptions: — înainte ca aplicația să fie afișată utilizatorului se fac ultimele inițializări.

applicationDidBecomeActive: — Aplicația va fi în curând disponibilă în Foreground. Aici se pot face ultimele ajustări înainte de a fi vizibilă.

applicationWillResignActive: — aplicația intră în mod de Inactive.

applicationDidEnterBackground: — aplicația a intrat în mod de Background.

applicationWillEnterForeground: — aplicația a trece din Background în mod de Foreground, însă nu este încă activă.

applicationWillTerminate: – Aplicația trece în stare de Suspended.

3. Pentru a bloca aplicația să ruleze în background  -> “Application does not run in background” -> YES. În acest caz la apăsarea butonului Home se apelează applicationWillTerminate: Aplicația va avea aproximativ 5 secunde să își facă clean up și să închidă/salveze.

4. Diagrama tranzițiilor de stare IOS



 

Aici sunt detaliate toate IOS keys din info.plist

 

Share Button

SWIFT – cum folosim Closures?

Closures în SWIFT au fost gândite și folosite ca un exemplu de funcții inline. Din experiența mea, “closures” sunt folosite în completion blocks pentru a notifica faptul că un block și-a terminat activitatea.

Un mic exemplu didactic – Universitatea din Toronto:

func performMagic (spell: String) -> String {
return spell
}

Avem o funcție simplă ce va primi printr-un argument un string și-l va returna.

Vom folosi closure pentru a defini o variabilă ce va “conține” corpul acestei funcții:

var newPerformMagic = {
(spell:String) -> String in
return spell
}

Pnetru a utiliza, e suficient
newPerformMagic(“test de closure”)

Share Button

Diagrama MVC – IOS

O aplicatie bine facuta IOS respecta principiile programarii MVC – Model – View – Controller.
O explicatie vizuala foarte buna despre “circulatia” in interiorul unei aplicatii IOS in poza de mai jos:
Model MVC IOS

In cazul in care datele din Model sunt aduse dintr-un JSON, exista posibilitatea ca ceea ce se doreste a se afisa in View sa NU existe la momentul afisarii, acest lucru datorandu-se faptului ca initializarea din JSON se face asincron:

MVC JSON fara NSNotification

Pentru a remedia acest aspect, avem nevoie de o intarziere. O intarziere care este de fapt o notificare pe care, atunci cand apare, o va capta controller-ul si va “da drumul” la executarea elementelor de View:

Model MVC cu NSNotification

Share Button

IOS – colturi rotunjite si borduri la poza de profil

Fie un UIImageView care va “încarca” o imagine. În cazul meu, am folosit imageTAView pentru a încarca poză de profil pentru aplicația mea de Twitter.
@property (nonatomic,strong) UIImageView *imageTAView;

In .m definim următoarele:
self.imageTAView.layer.cornerRadius = self.imageTAView.frame.size.width / 2;
self.imageTAView.clipsToBounds = YES;

Pentru a transforma imaginea pătrată în formă circulară definim raza circulara a layer-ului ca fiind jumătate din lățimea layerului pătrat. clipsToBounds “pune” masca nou-creată peste layerul inițiat pătrat.

Aplicarea bordurii se realizează cu borderWidth, proprietate din clasa CALayer, după cum urmează:

self.imageTAView.layer.borderWidth = 3.0f;
self.imageTAView.layer.borderColor = [UIColor lightGrayColor].CGColor;

Share Button