ISWD, Instytut Informatyki Politechnika Poznańska Technologie

Transkrypt

ISWD, Instytut Informatyki Politechnika Poznańska Technologie
ISWD, Instytut Informatyki Politechnika Poznańska
Programowanie dla iOS
Technologie Programistyczne
23.10.2013
Urządzenia iOS
Urządzenie
Data prezentacji
iPhone
9.01.2007/06.2007
iPod touch
5.09.2007
iPhone 3G
9.06.2008
iPod touch 2 gen
9.09.2008
iPhone 3GS
8.06.2009
iPod touch 3 gen
9.09.2009
iPad
27.01.2010/04.2010
iPhone 4
4.06.2010
iPod touch 4 gen
1.09.2010
iPad 2
2.03.2011
iPhone 4S
4.10.2011
Urządzenia iOS
Urządzenie
Data prezentacji
new iPad
7.03.2012
iPhone 5, iPod touch 5 gen
11.09.2012
iPad mini, iPad 4
23.10.2012
iPhone 5S, 5C
10.09.2013
iPad Air, iPad mini retina
22.10.2013
Dane techniczne
Dane techniczne
• System operacyjny: okrojona wersja Mac OS X
• Mobilna wersja przeglądarki Safari
• Początkowe wspierane tylko aplikacje webowe
• Od czerwca 2008 dostępne SDK
• Dystrybucja aplikacji poprzez AppStore
SDK
• wymagany Mac z procesorem Intela
• SDK jest darmowe
• Do dystrybucji aplikacji należy wykupić
subskrypcję Developer Program ($100
rocznie)
• Duże ograniczenia SDK
Architektura systemu
Cocoa Touch
Media
Core Services
Core OS
Architektura systemu
• Core OS, Core Services - podstawowe
interfejsy:
• typy danych
• dostęp do plików
• dostęp do sieci
• wątki
• ...
Architektura systemu
• Media:
• grafika 2D i 3D
• OpenGL ES, Quartz
• obsługa audio i wideo
• Core Audio
• Core Animation
Cocoa Touch
• UIKit
•
•
•
•
interfejs użytkownika
runtime
obsługa zdarzeń
API sprzętowe
•
•
•
•
klasy podstawowe
kolekcje
wrapery dla usług systemowych
podzbiór Cocoa Foundation
• Foundation
Na co uważać
• Różne wersje aplikacji dla iPhone/iPod i
iPad - wersje uniwersalne
• Różne rozdzielczości ekranu
• Ograniczenia wersji systemu, np. brak iOS 4
dla pierwszego iPhone i iPod
Narzędzia
programistyczne
• Xcode
• język - ObjectiveC
Emulator
Model aplikacji
• Generalnie aplikacje powinny być typu
Model-View-Controler
• obsługa zdarzeń
• aplikacja powinna:
• zainicjalizować swoje zmienne w zdarzeniu
applicationDidFinishLaunching
• obsłużyć błąd braku pamięci
applicationDidReceiveMemoryWarning
• posprzątać po sobie - applicationWillTerminate
Typy aplikacji
• Window-Based application
• View-Based application
• Tab Bar application
• Navigation-Based application
• Utility application
• OpenGL ES application
Okno i widok
• Aplikacja jest tworzona za pomocą
delegacji
• Każda aplikacja ma tylko jedno okno
(Window)
• Elementy na ekranie umieszczone są w
widokach (View), może ich być wiele
• Niektóre widoki mogą się obracać
Hello World
•
Tworzymy nowy
projekt w XCode
•
Window-Based
Application
Kod aplikacji
Kod delegacji
• Deklaracja
Kod delegacji
• Implementacja
Efekt
Kontrolki
• Dostępny jest standardowy
zestaw kontrolek
Kontrolery
• Dostępne kontrolery
Widoki danych
• i widoki
Pozostałe elementy UI
TeachTool
• obliczanie punktacji
w skali 6-stopniowej
• obliczanie wyniku
egzaminu
dyplomowego
• dwa widoki
wybierane przez
TabBar
TeachTool
• tworzymy nowy projekt Window-based
Application
• dodajemy klasę kontrolera
• tworzymy klasę PunktacjaViewController
• podobnie dodajemy klasę
EgzaminViewController
• w delegacie aplikacji dodajemy outlet do
kontrolera zakładek
• otwieramy MainWindow.xib w Interface
builderze
• dodajemy do okna TabBar Controller
• wybieramy pierwszą zakładkę
• ustawiamy jej plik zasobów w inspektorze
• ustawiamy własności zakładki
• wiążemy outlet z delegacji z kontrolerem
zakładek
• edytujemy PunktacjaViewController
• edytujemy PunktacjaViewController
• projektujemy widok
• dodajemy powiązania
• edytujemy EgzaminViewController
Działająca
aplikacja
SatFinder
Aplikacja SatFinder
• Jak ustawić antenę satelitarną?
• Wyliczenie na podstawie
długości i szerokości
geograficznej oraz pozycji
satelity
• Korzysta z GPS
SatFinder
Obsługa GPS
Nowy
Teach Tool
iOS7, Xcode 5
TeachTool 2
• Tylko obliczanie skali ocen
• Możliwość zdefiniowania progów
• Progi zapamiętywane w pliku
• Szablon aplikacji typu Utility
Nowy projekt
Nowy projekt
Ustawienia projektu
Aplikacja Utility
Projektujemy
widok główny
Tworzymy outlety
• Włączamy Assistant Editor • Przeciągamy z Ctrl na plik nagłówkowy
Outlety i akcje
Kod implementacyjny
Kod implementacyjny
Widok ustawień
• osadzamy TableView
• zmieniamy na statyczny
Po edycji
• ustawiamy 6 wierszy
• dodajemy kontrolki:
•
•
•
•
UIText
UILabel
UIButton
UIBarButton
Dodajemy gniazdka
• Aby obsłużyć tabelkę klasa musi obsługiwać
protokół UITableViewDataSource i
delegację UITableViewDelegate
Kod implementacyjny
Katalog Lego
Gdzie kupić klocki 1?
Gdzie kupić klocki 2?
Gdzie kupić klocki 3?
Gdzie kupić klocki 4?
Katalog Lego
• Informacje o zestawach przechowywane
lokalnie w bazie danych
• Parser strony shop.lego.com pod Windows
• Dane eksportowane do bazy sqlite
• Ceny ze sklepu Lego i Allegro
Strona Lego
Parser
• Parsujemy zestawy wg kategorii
• Jeżelli zestaw jest w kilku kategoriach
zapamiętujemy to
• Opis zestawu jest pamiętany jako HTML
• Dodatkowo parsujemy polski sklep
internetowy
SQLite
• Kompaktowa baza danych napisana w C
• Public Domain
• implementuje większość funkcji z SQL-92
• wykorzystywany w wielu systemach i
aplikacjach
Schemat bazy danych
Nowy projekt
• projekt w Xcode 4
• aplikacja typu nawigacyjnego
Nowy projekt
Nowy projekt
Ustawienia projektu
• Nazwa
• Docelowa platforma
• Ikony:
• zwykła 57x57 px
• retina 114x114 px
• ekran startowy
Biblioteka SQLite
• w zakładce Build Phases dodajemy
bibliotekę libsqlite3.dylib
• tworzymy bazę (np. wtyczka do FireFox)
• do projektu dodajemy plik z bazą
Kontroler głównego
widoku
Kontroler głównego
widoku
• Przy pierwszym uruchomieniu bazę danych
należy skopiować do katalogu roboczego
• W przyszłości aktualizacja bazy danych
Kontroler głównego
widoku
Kontroler głównego
widoku
Kontroler głównego
widoku
Kontroler głównego
widoku
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Kontroler widoku kategorii
Klasa zestawu
Klasa zestawu
Klasa zestawu
Kontroler widoku zestawu
Kontroler widoku zestawu
Widok zestawu
Efekt
Rozpoznawanie dotyku
Wielodotyk
• Ekran urządzenia iOS jest w stanie
rozpoznać do 5 punktów dotyku
• Zdarzenia są obsługiwane w kolejce
• Przekazywanie zdarzeń nie jest
automatyczne
Metody obsługujące
• touchesBegan
• gdy palec dotknie ekranu
informacje o każdym punkcie
• przekazuje
dotyku
• touchesMoved
• gdy palec przesuwa się po ekranie
• touchesEnded
• gdy palec się podniesie
• touchesCancelled
• gdy nastąpi przerwanie, np. telefon
Przykład
Przykład
• Domyślnie widoki nie reagują na
wielodotyk
• Zmieniamy opcję widoku
Metoda touchesBegan
touchesMoved
touchesEnded
Rozpoznawanie pozycji
Gesty
• Od iOS 4 specjalna klasa do rozpoznawania
gestów UIGestureRecognizer i jej
specjalizacje
• UITapGestureRecognizer
• UIPinchGestureRecognizer
• UIPanGestureRecognizer
• UISwipeGestureRecognizer
• UIRotationGestureRecognizer
• UILongPressGestureRecognizer
Obsługa gestu
• Definiujemy klasę do obsługi
• Przekazujemy jej referencję do metody,
która ma być wywołana po wykryciu gestu
• Niektóre gesty są pojedyncze (tap) inne
ciągłe (swipe, pan)
Przykład
Przykład
Pickery
Pickery
• Odpowiedniki ComboBox’ów
• Specjalizowany DatePicker
• Ogólny UIPickerView
Przykład
• Definiujemy gniazdka i wtyczki
• Projektujemy widok
Efekt
UIPickerView
• Uniwersalny picker
• Wymaga podania klasy stanowiącej źródło
danych
• Klasa musi realizować protokół
UIPickerViewDataSource
• Najlepiej gry realizuje go kontroler widoku
UIPickerViewDataSource
• Musi posiadać metody:
• numberOfComponentsInPickerView
• numberOfRowsInComponent
• titleForRow
Przykład
Klasa kontrolera
Klasa kontrolera
Klasa kontrolera
Multitasking
Multitasking
wersji iOS 4 był ograniczony do aplikacji
• Do
systemowych
może znajdować się w jednym ze
• Aplikacja
stanów:
• Na wierzchu - aktualnie wyświetlana
• aktywna
• nieaktywna
• W tle
• Zawieszona
Czas życia aplikacji
• Uruchomienie - wywoływana jest metoda
didFinishLaunchingWithOptions
• W momencie uzyskania ekranu
wywoływana jest metoda
applicationDidBecomeActive
• Jeżeli aplikacja od razu trafia do tła
wywoływana jest metoda
applicationDidEnterBackground
Czas życia aplikacji
• Aplikacja ma 5 sekund na zakończenie
metody
• Może zyskać więcej czasu wywołując
metodę
beginBackgroundTaskWithExpiration i
endBackgroundTask
Czas życia aplikacji
• Gdy aplikacja ma wyjść z tła wywoływana
jest metoda
applicationWillEnterForeground a potem
applicationDidBecomeActive
• Gdy aplikacja ma być zakończona
wywoływana jest metoda
applicationWillTerminate
Czas życia aplikacji
• Wszystkie aplikacje tworzone w Xcode 4
są domyślnie aplikacjami działającymi w tle
• Można to zmienić poprzez ustawienia
aplikacji poprzez edycję pliku Info.plist
Multitasking
• Jest dostępny od iPhone’a 3GS i iOS 4.
• W innym wypadku aplikacje kończą
działanie
• Można sprawdzić w kodzie, czy multitasking
jest dostępny
Powiadomienia
• Aplikacja w tle nie ma dostępu do ekranu
• Jedyny mechanizm to lokalne
powiadomienia
• Lokalne w przeciwieństwie do zdalnych serwerowych
Przykład
• Nowy projekt typu SingleView
• Powiadomienie ma być wyświetlone 10 s
po przejściu w tło
• Dodajemy plik dźwiękowy
• Modyfikujemy metodę
applicationDidEnterBackground
Storyboarding
Storyboarding
• Scenorys
• Nowe podejście do projektowania
widoków w Xcode 4.2
Projekt
• Tworzymy nowy projekt typu Single View
Application
Opcje projektu
Widok projektu
Edytor
Projekt startowego
widoku
Dodajemy nowy
ViewController
Dwa widoki
Projekt widoków
Edycja przejścia (segue)
Przeciągamy z Ctrl na kolejny widok
Zdefiniowane przejście
Dwa przejścia
Opcje przejścia
•
Style przejścia:
•
•
•
•
Push
Modal
Custom
Animacja przejścia:
•
•
•
•
•
Default
Cover vertical
Flip horizontal
Cross Dissolve
Partial curl
Klasa kontrolera
• Dodajemy klasę kontrolera dla drugiego
widoku
Klasa kontrolera
Klasa kontrolera
Storyboarding
• Można pisać własne klasy kontrolujące
przejścia
• Za przejścia mogą być odpowiedzialne
różne kontrolery widoku
• Są zdarzenia związane z przejściami
• Przejścia można wywoływać programowo
Grafika 2D
Grafika 2D
• Biblioteka odpowiedzialna - Quartz • Napisana w C
• Typowo rysujemy na obiekcie klasy UIView
• Operujemy na punktach klasy CGPoint lewy-górny narożnik ma współrzędne (0,0)
typ CGFloat
• Klasy CGRect i CGSize
Kontekst graficzny
• Konieczny do rysowania
• Uzyskujemy wywołując metodę
UIGraphicsGetCurrentContext
• Otrzymujemy obiekt typu CGContextRef
Kolory
• Klasa CGColorRef
• Przechowuje kolor i informacje o
przestrzeni kolorów
• Do wyboru RGBA, CMYK lub odcienie
szarości
• Można tworzyć kolory z klasy UIColor, ale
nie można korzystać z nich bezpośrednio
Przykład
• Nowy projekt typu SingleView
• Dodajemy klasę dziedziczącą po UIView
• Jako klasę implementującą widok w pliku
XIB wybieramy naszą klasę
• Odkomentowujemy metodę drawRect
• Edytujemy metodę drawRect
• Wykorzystanie klasy UIColor
Rysowanie ścieżki
Rysowanie
prostokąta
Rysowanie elipsy
Wypełnienie
kolorem
Rysowanie łuku
Rysowanie
krzywej Bezier
Waluty
Waluty
• Program wyświetlający aktualne kursy
podstawowych walut (predefiniowane EUR,
USD, GBP, CHF)
• kursy FOREX
• kursy w kantorze internetowym
• kursy w banku
• Interesują nas kursy sprzedaży
Waluty
• Dane wyświetlane w formie tabelarycznej z
podziałem na sekcje
• Odświeżane po wyświetleniu aplikacji lub
na żądanie
Źródło danych
• Serwis systemowy napisany w C#
uruchomiony na serwerze Windows 2003
Server
• Parsuje strony kantorów internetowych i
banku co 2 minuty
• Zapisuje i udostepnia plik RSS z kursami
Źródło danych
RSS
• Rich Site Summary
• Really Simple Syndication
• Format plików XML do publikowania
treście w Internecie
• Wspierany przez .Net
RSS
Aplikacja iOS
• Widok tabelaryczny
• Oparta na scenorysie (w
przyszłości wyświetlanie
szczegółów walut)
• Na razie tylko wersja
iPhone
Tworzymy projekt
Tworzymy projekt
Ikona i startup
Edytujemy scenorys
• usuwamy widok
(View) z szablonu
• wstawiamy widok
tabelaryczny (Table
View)
• wstawiamy prototyp
komórki (Table View
Cell)
Edytujemy scenorys
• Edytujemy zawartość
prototypu komórki
• 3 etykietki UILabel
• obrazek UIImage
• niewidzialny przycisk
nad ostatnią etykietą
Dodajemy klasę
• Klasa dziedziczy po UITableViewCell
• Będzie obsługiwała pojedynczą komórkę
tabeli
Dodajemy klasę
Dodajemy klasę
Tworzymy powiązania
• wracamy do scenorysu
• we własnościach komórki zaznaczamy klasę,
która ją obsługuje
• otwieramy edytor pomocniczy (Assistant
Editor)
• przeciągamy z Ctrl z elementów interfejsu
na nagłówek klasy
Tworzymy powiązania
Tworzymy powiązania
• Dodajemy jeszcze dwie metody obsługujące
formatowanie
Implementujemy klasę
Implementujemy klasę
Dodajemy klasę
• Klasa Currency do obsługi pojedynczego
kursu waluty
Dodajemy klasę
Implementujemy
kontroler
Implementujemy
kontroler
Implementujemy
kontroler
Obsługa odświeżania
Parsowanie RSS
Parsowanie RSS
Parsowanie RSS
Obsługa tabeli
Obsługa tabeli
Obsługa tabeli
Developer Portal
iOS Developer Portal
iOS Developer Portal
• Certyfikat główny
• Numer UDID urządzenia
• Identyfikatory aplikacji
• Provisioning profile
Certyfikat główny
Numery UDID
Identyfikatory aplikacji
Profile
Dostępne API
• akcelerometry
• pozycjonowanie (GPS, triangulacja)
• Google Maps
• OpenGL
• XML
• przeglądarka webowa
• SQLLite
• aparat
Obracane widoki
Obracane widoki
• UIInterfaceOrientationPortrait
• UIInterfaceOrientationPortraitUpsideDown
• UIInterfaceOrientationLandscapeRight
• UIInterfaceOrientationLandscapeLeft
Obracany widok
• Bez dodatkowych zmian nie bardzo działa
Size inspector
• Umożliwia ustawienie automatycznego
wyrównywania
• Obroty można obsługiwać programowo
Obsługa obrotu
• Przeciążamy metodę
willAnimateRotationToInterfaceOrientation
Program MFI
• Made For i(Phone, Pod, Pad)
• Możliwość projektowania akcesoriów
podłączanych bezpośrednio do urządzeń
AppStore
Do zobaczenia
速

Podobne dokumenty