iOS
alkalmazásfejlesztés Koltai Róbert
mit vettünk a múlt órán? • • • • • • •
mi az a protocol? szintaktikája? mire jó a category? milyen memóriakezelés van iOS-en? mi ennek a 4 állapota? mi a főszabály? + 4 része mi az az ARC? mi az új az ARC-s property-k használatában? 2
mai óra felépítése • • • • • • •
ismétlés iOS app lifecycle MVC view viewControler navigationController 3
iOS
Core OS • OSX Kernel • Mach 3.0 • BSD • Sockets Security • Power Management • Keychain Access • Certificates • File System Bonjour 4
iOS
Core Services • Collections • AddressBook • Networking • File Access • SQLite • Core Location • NetServices • Threading Preferences • URL Utilities 5
iOS
Media • Core Audio • OpenAL • Audio Mixing • Audio Recording • Video Playback • JPEG, PNG, TIFF PDF • Quartz (2D) • Core Animation • OpenGL ES 6
iOS
Cocoa Touch • Multi-Touch • Core Motion • View Hierarchy • Localization • Controls • Alerts • Web View • Map Kit • Image Picker • Camera 7
application lifecycle
alkalmazás állapotai • not running • inactive • active • background • suspended 8
application lifecycle application delegate • - (void)application:didFinishLaunchingWithOptions: (NSDictionary *)launchOptions;
• - (void)applicationWillResignActive: • - (void)applicationDidBecomeActive: • - (void)applicationDidEnterBackground: • - (void)applicationWillEnterForeground: 9
application lifecycle application delegate • - (BOOL)application:handleOpenURL:(NSURL *)url; • - (void)applicationDidReceiveMemoryWarning: • - (void)application:didReceiveLocalNotification: (UILocalNotification *)notification;
• - (void)application:didReceiveRemoteNotification: (NSDictionary *)userInfo;
• - (void)applicationWillTerminate: 10
MVC • Model • az alkalmazás lényege, maga az app(nem a megjelenítés)
• View • amit a user lát
• Controller • a modelt hogyan prezentáljuk a user felé
11
MVC • Stanford 2011 fall / 1 / 15 - 37.
12
View • coordinates • origó: a bal felső sarok • egységek: pontok (nem pixelek) (0,0) x
(320,250)
y 13
View • coordinates • bounds • center (0,0) • frame
320
320
0 5 2
y
14
(0
,0 2 0 0 )
x
View • coordinates • bounds • center (0,0) • frame
x
un ds bo
frame
frame
y
15
(0
,0
)
bo
un ds
View • coordinates • bounds • center • frame • superview • subviews(array) • add • remove 16
View - kóddal való összekötés • Hogyan tudunk a kódból változtatni az UIn? • Hogyan tudjuk a UI események hatására műveleteket végezni? • Lényegében az alábbi két dolgot kell megoldanunk: • Referenciát (mutatót) kell szereznünk a betöltött UI struktúra bizonyos objektumaira • Meg kell adnunk eseménykezelőket bizonyos UI objektumok egyes eseményeire 17
View - outlet • Olyan változókat (Outleteket) adhatunk meg, amelyekbe a rendszer betöltéskor automatikusan beteszi a megadott objektumokat. • Belehelyezzük a kódba az Outlet propertyket • IBOutlet jelölőt kell használnunk, innen tudja az Interface Builder, hogy az adott property egy Outlet • Az Interface Builderben beállítjuk, hogy melyik objektumot akarjuk betölteni a property-be. • A View betöltéskor a rendszer automatikusan behelyezi a hivatkozást. • A kódban típusosan elérjük a betöltött UI elemet. 18
View - outlet
@interface ViewController : UIViewController
!
@property (weak, nonatomic) IBOutlet UITextField *resultTextField;
!
@end
19
View - action • megadhatjuk azokat a metódusokat , amelyeket a rendszer meghívjon bizonyos események bekövetkeztekor • belehelyezzük a kódba az Action metódusokat • az IBAction visszatérési értéket kell használni, ami igazából void, de innen tudja a rendszer, hogy ez egy Action metódus. Paramétere vagy nincs a metódusnak, vagy egy (id) sender paramért kaphat, ami azt az objektumot tartalmazza, amelyre vonatkozik az esemény. • az Interface Builderben beállítjuk, hogy melyik objektum melyik eseménye váltsa ki a hívást. (pl. Touch Up Inside) • az esemény bekövetkeztekor automatikusan meghívódik a metódus. 20
View - action
@interface ViewController : UIViewController
!
- (IBAction)numberPushed:(id)sender;
!
@end
21
View Interface Builder
UI a képernyőn
XIB fájl
Build
Programkód
Megjelenítés
NIB fájl
Betöltés
Objektum példány
22
UIViewController
• MVC/controller • a UIViewController-nek van egy nagyon fontos proberty-je: @property(nonatomic, retain) UIView *view;
• van életciklusa
23
UIViewController lifecycle • az életciklusa az alloc, init-tel kezdődik - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
!
• ha a nibName nil(nem használunk .xib filet), akkor a UIViewController automatikusan meghívja: - (void)loadView
önnmagaban([self
loadView])
!
• NE HASZNÁLJUK egyszerre a .xib-t és a loadView-t 24
UIViewController lifecycle - (void)viewDidLoad • inicializálás és az outletek beállitása után • de a bounds még nincs beállítva! - (void)viewWillAppear:(BOOL)animated • mielőtt megjelenik a kijelzőn • a végén állítódik be a bounds! - (void)viewDidAppear:(BOOL)animated! - (void)viewWillDisappear:(BOOL)animated • mielőtt eltűnik a kijelzőről • állapot mentés, adat mentés - (void)viewDidDisappear:(BOOL)animated 25
controller of the controllers speciális View Controller, ami MVC-k gyűjteményét kezeli
• UINavigationController • UITabBarController
26
UINavigationController • több, hierarchikus képernyő közötti navigációt segíti • stack (verem) jellegű működéssel rendelkezik • úgy tudunk lépkedni az egyes képernyők között, hogy a visszalépéseknél nem kel tudnunk mi volt a szülő képernyőnk • nagyon gyakran használt komponens • gyakran használják táblázatokkal együtt
27
UINavigationController NavigationBar • • • •
képernyő tetején elhelyezkedő sáv megmutatja az adott view címét lehetőséget ad a visszalépésre az előző szintre a vissza gombon mindig az előző szint címe van • jobb oldalán van hely egy szabad gombnak
28
UINavigationController • létrehozás: alloc/init • meg kell adni egy rootViewControllert • push [self.navigationController pushViewController:nextViewController animated:YES];
• pop
[self.navigationController popToRootViewControllerAnimated:YES]; [self.navigationController popViewControllerAnimated:YES]; [self.navigationController popToViewController:prevViewController animated:YES];
29
UINavigationController
30
UINavigationController
31
UITabBarController
• • • •
több view között lehet fülekkel váltogatni képernyő alján szokott elhelyezkedni általában ez a legkülső navigációs elem maximum 5 lap fér el, ezután megjelenik a more lehetőség 32
UITabBarController
• lehet benne NavigationController, de mindig a TabBarController a külső elem • általában nem igényel programozás, beállítjuk a betöltendő ViewControllereket, és a többit kezeli magától • egyszerre mindig egy fül lehet aktív, a többi megőrzi állapotát és bármikor átválthatunk
33
UITabBarController
34
köszönöm a figyelmet!
Koltai Róbert
[email protected]