Programowanie urządzeń mobilnych Apple Materiały dydaktyczne. Michał Dudkiewicz Błażej Zyglarski



Podobne dokumenty
Temat 4. Storyboard i element interfejsu użytkownika Gra w kulki- część 1

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Programowanie dla iphone projektowanie interfejsu użytkownika

Temat 3. Projektowanie interfejsu użytkonwnika Kalkulator pierwszy program dla IOS

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Temat 13. Czujniki Dlaczego Twój Smartfon jest taki smart?

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Programowanie dla ios

Programowanie dla ios

Politechnika Poznańska, Instytut Informatyki, TWO/GE. Programowanie dla ios

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie dla iphone Storyboarding i własne elementy interfejsu użytkownika

Przechowywanie danych w IOS

Podstawy Programowania Obiektowego

Wykład 5: Klasy cz. 3

Programowanie dla ios

Wykład 8: klasy cz. 4

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Materiały do zajęć VII

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie zaawansowane

TEMAT : KLASY DZIEDZICZENIE

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Wstęp do Programowania, laboratorium 02

Frameworki IOS. Wykład 14. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.

PHP 5 język obiektowy

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wprowadzenie do Objective-C

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Zmienne, stałe i operatory

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

2 Przygotował: mgr inż. Maciej Lasota

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie obiektowe

1 Podstawy c++ w pigułce.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

Dokumentacja do API Javy.

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Język C++ zajęcia nr 2

Wykład 5 Okna MDI i SDI, dziedziczenie

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Zaawansowane programowanie w języku C++ Klasy w C++

Lab 9 Podstawy Programowania

Szablony klas, zastosowanie szablonów w programach

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

OBC01/TOPMOB Projektowanie w języku Objective-C

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Podstawy programowania skrót z wykładów:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Aplikacje w środowisku Java

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Dzięki szkoleniu. Dni: 3. Opis: Adresaci szkolenia

Programowanie w języku Swift : Big Nerd Ranch guide / Matthew Mathias, John Gallagher. Gliwice, cop Spis treści

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Kurs WWW. Paweł Rajba.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dźwięk w IOS. Wykład 8. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.

Wykład 4: Klasy i Metody

Java Język programowania

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Programowanie współbieżne i rozproszone

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

MATERIAŁY DO ZAJĘĆ II

Podstawy technologii WWW

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Programowanie obiektowe

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1 Podstawy c++ w pigułce.

Wstęp do programowania obiektowego. Wykład 2

Programowanie obiektowe - 1.

SWIFT. Zaawansowane Programowanie Obiektowe

Technologie obiektowe

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Projektowanie aplikacji internetowych laboratorium

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Transkrypt:

Programowanie urządzeń mobilnych Apple Materiały dydaktyczne Michał Dudkiewicz Błażej Zyglarski Wydział Matematyki i Informatyki UMK 2012 i

Spis treści 1) Podstawy środowiska XCode i języka Objective-C 1 a. Wymagana wiedza wstępna 1 b. Cel dydaktyczny 1 c. Tematyka wykładu i laboratorium 1 d. Zadania 2 e. Prezentacja 6 2) Klasy, obiekty, dziedziczenie i zaawansowane cechy Objective-C 17 a. Wymagana wiedza wstępna 17 b. Cel dydaktyczny 17 c. Tematyka wykładu i laboratorium 17 d. Zadania 18 e. Prezentacja 22 3) Programowanie na iphone interfejs użytkownika 32 a. Wymagana wiedza wstępna 32 b. Cel dydaktyczny 32 c. Tematyka wykładu i laboratorium 32 d. Zadania 33 e. Prezentacja 37 4) Storyboard i inne elementy projektowania interfejsu 44 a. Wymagana wiedza wstępna 44 b. Cel dydaktyczny 44 c. Tematyka wykładu i laboratorium 44 d. Zadania 45 e. Prezentacja 51 5) Animacje UIKit 60 a. Wymagana wiedza wstępna 60 b. Cel dydaktyczny 60 c. Tematyka wykładu i laboratorium 60 d. Zadania 61 e. Prezentacja 65 6) Przechowywanie danych w IOS 71 a. Wymagana wiedza wstępna 71 b. Cel dydaktyczny 71 c. Tematyka wykładu i laboratorium 71 d. Zadania 72 ii

e. Prezentacja 75 7) CoreImage 81 a. Wymagana wiedza wstępna 81 b. Cel dydaktyczny 81 c. Tematyka wykładu i laboratorium 81 d. Zadania 82 e. Prezentacja 84 8) AudioToolbox i CoreAudio 89 a. Wymagana wiedza wstępna 89 b. Cel dydaktyczny 89 c. Tematyka wykładu i laboratorium 89 d. Zadania 90 e. Prezentacja 92 9) CoreGraphics / Quartz2D 98 a. Wymagana wiedza wstępna 98 b. Cel dydaktyczny 98 c. Tematyka wykładu i laboratorium 98 d. Zadania 99 e. Prezentacja 103 10)OpenGLES i GLKit 110 a. Wymagana wiedza wstępna 110 b. Cel dydaktyczny 110 c. Tematyka wykładu i laboratorium 110 d. Zadania 111 e. Prezentacja 114 11)Wzorce projektowe, Tabele 119 a. Wymagana wiedza wstępna 119 b. Cel dydaktyczny 119 c. Tematyka wykładu i laboratorium 119 d. Zadania 120 e. Prezentacja 126 12)XML i sieć w ios 133 a. Wymagana wiedza wstępna 133 b. Cel dydaktyczny 133 c. Tematyka wykładu i laboratorium 133 d. Zadania 134 e. Prezentacja 138 13) Sensory, dlaczego Twój smartfon jest smart? 144 a. Wymagana wiedza wstępna 144 b. Cel dydaktyczny 144 c. Tematyka wykładu i laboratorium 144 d. Zadania 145 iii

e. Prezentacja 149 14)Integracja z IOS 156 a. Wymagana wiedza wstępna 156 b. Cel dydaktyczny 156 c. Tematyka wykładu i laboratorium 156 d. Zadania 157 e. Prezentacja 160 15)Integracja z IOS 2 165 a. Wymagana wiedza wstępna 165 b. Cel dydaktyczny 165 c. Tematyka wykładu i laboratorium 165 d. Zadania 166 e. Prezentacja 168 iv

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Znać język C 2) Znać zasady zarządzania pamięcią w komputerze 3) Znać pojecie wskaźnika 4) Znać podstawowe narzędzia tworzenia aplikacji konsolowych w C 2) Student powinien 1) Znać język C++ 2) Znać podstawy programowania obiektowego 3) Student może 1) Znać język Java lub C# Cel dydaktyczny 1) Student musi 1) Umieć stworzyć projekt aplikacji konsolowej w Xcode z wykorzystaniem Objective-C 2) Umieć skompilować i uruchomić program w Xcode 3) Skorzystać z podstawowych klas i funkcji Objective-C 4) Nauczyć się zasad wywoływania metod w Objective-C 5) Znać zasady implementacji obiektów w Objective-C 6) Znać podstawowe proste typy danych oraz podstawowe obiektowe typy danych 2) Student powinien 1) Umieć zaimplementować własną klasę w Objective-C 2) Rozumieć różnicę między metodami klasy a metodami obiektu 3) Umieć operować interfejsami 4) Znać zasady dziedziczenia 5) Rozumieć różnicę między metodami klasy a obiektu 6) Znać zasady dotyczące wiązań w Objective-C 3) Student może 1) Umieć tworzyć i wykorzystywać metody fabrykujące Zakres tematyczny i laboratorium. Niniejsze zajęcia wprowadzają studenta do świata jęyzka Objective-C, który oparty jest na znanych wcześniej standardach języków C i C++. Student nauczy się tutaj podstawowej obsługi środowiska Xcode i napisze proste programy z wykorzystaniem tego jezyka Poruszane zagadnienia: C jako podstawa Objective-C Nazewnictwo plików Dodawanie plików nagłówkowych Obiektowe typy danych - klasa a obiekt Interfejs (*.h) Implementacja (*.m) Dziedziczenie jako sposób na zbudowanie hierarchii obiektów Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 1/6 1/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Zasady dotyczące nazewnictwa klas w projektach Objective-C Prefiksy jako odpowiednik paczek z języka Java Zarezerwowane prefiksy Apple Typowanie (silne, słabe), typ id Metody instancji (-) i ich zakres działania Metody klas (+) i ich zakres działania Słowa kluczowe sygnatury Obiekty jako wskaźniki Właściwości obiektu Ustawianie i pobieranie stanu właściwości obiektu z wykorzystaniem syntaktyki "." Metody fabrykujące Wiązania późne w ObjectiveC Załączniki 1. Prezentacja_1.pdf - slajdy prezentacji wykładu 2. Pokaz Xcode.mp4 - film pokazujący jak stworzyć pierwszy projekt w Xcode Zadania na Laboratorium Zadanie 1 Stwórz nowy projekt Xcode. Jako typ wybierz aplikację konsolową. Wypisz na standardowe wyjście napis Hello Xcode! Podpowiedzi. 1) Aplikację tworzymy wbierając Create a new Xcode project w ekranie startowym Xcode. 2) W kolejnym oknie Xcode możemy wybrać odpowiedni typ aplikacji. W niniejszym zadaniu wybieramy Command Line Tool z sekcji OSX. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 2/6 2/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

3) Standardowo zostanie stworzona zwykła aplikacja C, dlatego należy zwrócić uwagę, aby na kolejnym ekranie kreatora wybrać aplikację typu Foundation 4) Kod pełnej aplikacji (czyli zawartość pliku *.m) powinna wyglądać tak #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 3/6 3/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

NSLog(@"Hello, Xcode!"); return 0; Zadanie 2 Stwórz klasę Objective-C, MaszynaLosujaca, posiadającą metodę -(int)losuj:(int)zakres, losującą z zadanego zakresu liczby i wypisz 20 takich liczb na standardowe wyjście. Podpowiedzi 1) Do losowania użyj funkcji arc4random 2) Klasa MaszynaLosujaca powinna dziedziczyc z klasy NSObject. -(int)losuj:(int)zakres{ return arc4random()%zakres; 3) Kod źródłowy prawidłowego pliku nagłówkowego #import <Foundation/Foundation.h> @interface MaszynaLosujaca : NSObject -(int)losuj:(int)zakres; @end 4) Kod źródłowy klasy #import "MaszynaLosujaca.h" @implementation MaszynaLosujaca -(int)losuj:(int)zakres{ return arc4random()%zakres; @end 5) Tworzenie obiektu klasy MaszynaLosujaca * m = [[MaszynaLosujaca alloc]init]; 6) Wywoływanie metod na obiekcie klasy [m losuj:43]; 7) Kompletny kod pliku main.m #import <Foundation/Foundation.h> Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 4/6 4/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

#import "MaszynaLosujaca.h" int main(int argc, const char * argv[]) { @autoreleasepool { MaszynaLosujaca * m = [[MaszynaLosujaca alloc]init]; for(int i =0;i<20;i++){ int l = [m losuj:43]; printf("%d\n",l); return 0; Zadanie 3 Napisz program Lotto, który wylosuje bez powtórzeń 6 liczb z 49. Użyj do tego celu własnej klasy MaszynaLotto z metodą -(NSNumber)losuj. Podpowiedzi 1) Do przechowywania numerów do wylosowania wykorzystaj NSMutableArray. Zadeklarują ją jako właściwość klasy, @property(nonatomic) NSMutableArray * numery; 2) Nie zapomnij o użyciu dyrektywy @synthesize żeby wygenerować metody typu get i set dla tego pola. @synthesize numery; 3) Zainicjalizuj pole numery we własnoręcznie stworzonym inicjalizatorze klasy. -(id)init{ self= [super init]; if(self){ self.numery= [[NSMutableArray alloc] initwithcapacity:49]; for(int i = 1;i<=49;i++){ [self.numery addobject:[nsnumber numberwithint:i]]; return self; 4) Losując obiekt z tej tablicy pamiętaj o jego usunięciu, tak aby w tablicy przy każdym losowaniu zostawało mniej elementów. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 5/6 5/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

-(NSNumber*)losuj{ int w= arc4random()%self.numery.count; NSNumber * n = [self.numery objectatindex:w]; [self.numery removeobject:n]; return n; Zadania samodzielne Zadanie 1 Napisz program, który będzie realizował zadanie kalkulatora (dodawanie, odejmowanie, mnożenie i dzielenie. Każde działanie ma być pobrane ze standardowego wejścia. Dla każdego działania ma być stworzony obiekt klasy Działanie i przekazany do obiektu klasy Kalkulator. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 6/6 6/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

#import "Fraction.h" #import <stdio.h> @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; if ( self ) { [self setnumerator: r: n anddenominator: d]; return self; -(void) print { printf( "%i/%i", numerator, denominator ); -(void) setnumerator: (int) n { numerator = n; -(void) setdenominator: (int) d { denominator = d; Podstawy środowiska XCode i wprowadzenie do języka Objective-C Wykład 1 Popularność Objective-C Miejsce w rankingu popularności języków programowania 2007 45 2011 6 2012 4 2013 3 -(void) setnumerator: (int) n anddenominator: (int) d { numerator = n; denominator = d; Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) 2 C jako podstawa Objective-C C jest językiem bazowym dla Objective-C Poza tym można również używać C++ Zorientowany obiektowo Rozszerzenie C Enkapsulacja Dziedziczenie Polimorfizm 3 4 Nazewnictwo plików Dodawanie plików nagłówkowych.h Pliki nagłówkowe. Deklaracje klas, typów, funkcji, stałych.m Pliki źródłowe zawierające kod C i Objective-C.mm Pliki źródłowe zawierające dodatkowo (poza kodem C i Objective-C) również kod C++ #import To samo co #include Ale gwarantuje dodanie pliku tylko raz. 5 6 7/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Podstawowe typy danych Klasy Typ Przykład Stałej Znaki formatowania char a, \n %c short int - %hi, %hx, %ho unsigned short int - %hu, %hx, %ho int 12, -97, 0xFFE0, 1077 %i, %x, %o unsigned int 12u, 100U, 0xffffu %u, %x, %o long int 12L, -200l, 0xffffL %li, %lx, %lo unsigned long int 12UL, 100ul, 0xffeeUL %lu, %lx, %lo long long int 0xe5e5e5e5LL, 500ll %lli, %llx, %llo unsigned long long int 12ull, 0xffeeULL %llu, %llux, %llo float 12.34f, 3.1e-5f, 0x1p3 %f, %e, %g, %a double 12.34, 3.1e-5, ox.1p3 %f, %e, %g, %a long double 12.34L, 3.1e-5l %Lf, %Le, %Lg, %La id nil %p 7 Klasa Enkapsulacja danych Metody pracy na danych Obiekt Instancja klasy Własna kopia w pamięci Wskaźniki do metod klasy 8 Klasa w Objective-C Interfejs Interfejs (*.h) Deklaracja Definiuje zmienne instancji Definiuje metody związane z klasą @interface Deklaracja @end Implementacja (*.m) Implementacja kodu metod 9 10 Klasa w Objective-C Dziedziczenie Dziedziczenie jako sposób na zbudowanie hierarchii obiektów 11 12 8/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Dziedziczenie Przykładowa ścieżka dziedziczenia elementów interfejsu użytkownika Nazwy klas Muszą być unikalne Na przykład pisząc aplikację o nazwie KalendarzKowalskiego można użyć klas KKTabela KKListowanie 13 NS UI Prefiksy jako odpowiednik paczek z języka Java 14 Typowanie Silne konkretne typy Słabe kolekcje obiektów Metody w Objective-C Metody instancji Zakres działania wybrana instancja klasy Wymaga instancji klasy Używamy wskaźników (*) id implikuje użycie wskaźnika. Metody klas Nie wymaga instancji klasy 15 16 Metody w Objective-C Objective-C jest wrażliwy na wielkość liter Ważna wielkość liter w nazewnictwie metod Metody w Objective-C Typ metody - minus metoda instancji + plus metoda klasy Sygnatura metody składa się zwykle z kliku słów kluczowych, opisujących zmienne. 17 18 9/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Metody w Objective-C Typ zwracany Metody w Objective-C Słowa kluczowe sygnatury Nazwa metody: insertobject:atindex: 19 20 Metody w Objective-C : Dwukropek deklaruje obecność parametru Metody w Objective-C Typy parametrów 21 22 Metody w Objective-C Nazwy parametrów Wywołanie metody Wywołanie metody odbywa się przez wysłanie do obiektu wiadomości (messaging object) Wiadomość to napis składający się z sygnatury metody i parametrów Zamknięty w nawiasach kwadratowych razem z obiektem do którego jest kierowana 23 [obiekt wiadomosc] 24 10/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Wywołanie metody Zwykłe wysłanie wiadomości Wywołanie metody Pobieranie wartości Zagnieżdżone wysłanie wiadomości Obiekt myappobject ma metody do Pobierania tablicy (thearray) Pobierania obiektu do wstaiwenia (objecttoinstert) 25 26 Przekazywanie argumentów Zwracane wartości Obiekty jako wskaźniki - (int)magicnumber; - (void)saysomething:(nsstring *)greeting; - (int)magicnumber { return 42; - (void)saysomething:(nsstring *)greeting { NSLog(@"%@", greeting); 27 int interestingnumber = [someobject magicnumber]; 28 Wysyłanie wiadomości do siebie Tworzenie obiektów Pamięć jest alkowana dynamicznie + (id)alloc; zdef. w NSObject - (id)init; inicjalizacja właściwości wartościami początkowymi 29 30 11/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Właściwości obiektu Ustawianie i pobieranie stanu właściwości obiektu z wykorzystaniem syntaktyki. -(type)propertyname -(void)setpropertyname:(type) Klasa jako obiekt Klasa w Objective-C jest w rzeczywistości traktowana jako obiekt typu Class Dlatego może posiadać metody (metody klasy) 31 32 Metody klas Używane jako metody fabrykujące nowe obiekty klas Używane do przekazywania współdzielonych informacji Przykłady Metody klasy NSString 33 34 Implementacja klasy @implementation Implmentacja @end Przykład Implementacja klasy MyClass Z metodą fabrykującą createmyclasswithstring: Nazwy metod odpowiadają tym z interfejsu. 35 36 12/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Interfejs Implementacja 37 38 Wiązania Objective-C jest językiem dynamicznym Wiązania późne. Wywoływana jest metoda z klasy obiektu, który rzeczywiście jest wskazywany przez wskaźnik Zmienne Dobra praktyka natychmiastowe inicjalizowanie zmiennych skalarnych BOOL success = NO; int magicnumber = 42; Wskaźniki na obiekty są automatycznie inicjalizowane jako nil. 39 Do nil można wysłać wiadomość i nic się nie dzieje 40 Obiektowe typy danych NSString Ciągi znaków Typ Opis Stałe NSObject Klasa bazowa obiektów Objective-C NSString Ciągi znaków @ Napis NSMutableString Ciągi znaków o zmiennej długości NSNumber Przechowuje wszelkie typy liczbowe NSInteger NSArray Tablice NSMutableArray Tablice o zmiennej liczbie elementów NSData Dane (bajty) NSMutableData Dane o zmiennym rozmiarze NSHashTable Słownik NSError Błędy NSException Wyjątki NS. 41 Wsparcie dla ciągów znaków znanych z C Zalecane uzycie obiektów NSString Wbudowane zarządzanie pamięcią Ciągi dowolnej długości Unicode Formatowanie (styl printf) 42 13/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

NSString NSString *fromcstring = [NSString stringwithcstring:"jakis ciag znakow" encoding:nsasciistringencoding]; Kolekcje NSArray, NSSet i NSDictionary. NSString *mystring = @"Skrócony zapis"; NSString *anotherstring = [NSString stringwithformat:@"%d %@", 1, @"String"]; 43 44 NSArray NSArray + (id)arraywithobject:(id)anobject; + (id)arraywithobjects:(id)firstobject,...; - (id)initwithobjects:(id)firstobject,...; Niezmienna 45 46 Używanie tablicy Używanie tablicy Sortowanie Tworzona jest nowa tablica. 47 48 14/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

NSMutableArray Zmiennej długości Dodawanie i usuwanie elementów NSSet Zbiór nieuporządkowany obiektów Niezmienny Sortowanie w miejscu 49 50 NSSet Tylko jedna referencja do jednego obiektu NSDictionary Zapamiętywanie par. Obiektu mogą być kluczami, ale wtedy muszą dawać możliwość skopiowania się przez NSDictionary. 51 Stały 52 NSDictionary NSMutableDictionary Zmienny 53 54 15/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

nil w kolekcjach Nie można dodać NSNull klasa singleton. Reprezentuje brak obiektu Zakończenie KONIEC 55 56 16/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Temat 2. Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Umieć stworzyć projekt aplikacji konsolowej w XCode z wykorzystaniem Objective-C 2) Umieć skompilować i uruchomić program w XCode 3) Skorzystać z podstawowych klas i funkcji Objective-C 4) Nauczyć się zasad wywoływania metod w Objective-C 5) Znać język C 6) Znać zasady zarządzania pamięcią w komputerze 7) Znać pojecie wskaźnika 8) Znać podstawowe narzędzia tworzenia aplikacji konsolowych w C 2) Student powinien 1) Znać jezyk Java lub C# lub C++ Cel dydaktyczny 1) Student musi 1) Umieć tworzyć klasy Objective-C 2) Umieć tworzyć hierarchę klas w Objective-C 3) Umieć wykorzystywać późne wywołanie metod w Objective-C 4) Umieć korzystać z kolekcji 5) Umieć tworzyć własne inicjalizatory 6) Znać typ id 2) Student powinien 1) Umieć korzytstać z kategorii klas 2) Umieć definiować kategorie klas 7) Umieć używać wbudowanych struktur danych Objective-C 3) Student może 3) Umieć definiować protokoły 4) Umieć definiować bloki kodu Zakres tematyczny wykładu i laboratorium Niniejsze zajęcia wprowadzają szereg zaawansowanych zagadnień związanych z programowaniem w czystym Objective-C, naświetlając możliwości tego języka pod kontem różnic do innych znanych języków programowania obiektowego. Zostaną przedstawione zaawansowane metody deklaracji klas oraz rozszerzania klas istniejących. Konwencje nazewnictwa klas, obiektów, zmiennych i metod Składowe publiczne, prywatne i chronione alloc + init Właściwości zadeklarowane Zachowanie właściwości (readonly, readwrite, atomic, nonatomic, strong, retain) Praca z własną instancją zmiennej Przechowywanie obiektów w pamięci Silne referencje i słabe referencje NSCopying i (copy) Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 1/5 17/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Protokoły i ich deklaracja i implementacja klas z nimi zgodnych Dziedziczenie protokołów Definicja i użycie kategorii - rozszerzanie własności klas Implementacja kategorii w plikach zewnętrznych Kategorie a nazewnictwo metod Kategorie anonimowe Użycie rozszerzania klas do ukrywania prywatnych elementów klasy. Bloki kodu Bloki kodu i dostęp do zmiennych Załączniki 1. Prezentacja_2.pdf - slajdy prezentacji wykładu Zadania na laboratorium Zadanie 1 Rozszerz klasę MaszynaLotto z poprzednich ćwiczeń, dodając do niej kategorię, pozwalającą na wylosowanie dodatkowo jeszcze jednej liczby z zakresu liczb (jak w grze Lotto z plusem). Użyj do tego kategorii ObjectiveC 1) Kategorię możesz zaimplementować wewnątrz istniejącego pliku lub stworzyć nową parę plików (MaszynaLotto+Plus.h i MaszynaLotto+Plus.m) 2) Wewnątrz nowopowstałych klas zdefiniuj metodę (NSNumber*)plus; #import "MaszynaLosujaca+Plus.h" @implementation MaszynaLotto (Plus) -(NSNumber *)plus{ int n = arc4random()%self.numery.count; return [self.numery objectatindex:n]; @end Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 2/5 18/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

3) Zaimportuj do pliku main.m plik nagłówkowy kategorii. Teraz możesz korzystać z klasy MaszynaLotto i wywoływać na niej metodę plus #import <Foundation/Foundation.h> #import "MaszynaLosujaca.h" #import "MaszynaLosujaca+Plus.h" int main(int argc, const char * argv[]) { @autoreleasepool { MaszynaLosujaca * m = [[MaszynaLosujaca alloc]init]; NSNumber * plus = [m losuj]; printf("plus: %d\n",(int)plus.integervalue); for(int i =0;i<6;i++){ NSNumber * l = [m losuj]; printf("%d\n",(int)l.integervalue); return 0; Zadanie 2 Stwórz nową klasę MaszynaMulti, która będzie rozszerzała klasę MaszynaLotto z poprzednich ćwiczeń. MaszynaMulti ma mieć możliwość losowania z 80 liczb. Podpowiedzi 1) W inicjalizatorze klasy MaszynaMulti uzupełnij brakujące liczby #import "MaszynaMulti.h" @implementation MaszynaMulti -(id)init{ self= [super init]; if(self){ for(int i = 50;i<=80;i++){ [self.numery addobject:[nsnumber numberwithint:i]]; return self; @end 2) W pliku nagłowkowym pamiętaj o zaimportowaniu pliku MaszynaLosująca.h Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 3/5 19/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

#import "MaszynaLosujaca.h" @interface MaszynaMulti : MaszynaLosujaca 3) Skorzystaj z tej klasy tak jak w poprzednich przypadkach MaszynaMulti * m = [[MaszynaMulti alloc]init]; for(int i =0;i<20;i++){ NSNumber * l = [m losuj]; printf("%d\n",(int)l.integervalue); Zadanie 3 (samodzielne) W podobny sposób skonstruuj klasę MaszynaMiniLotto. Zadanie 4 Zadeklaruj tablicę, i umieść w niej obiekty MaszynaLotto, MaszynaMulti i MaszynaMiniLotto. Wylosuj jedną z nich i sprawdź, którą. Na tej podstawie ustal jaką ilość liczb wylosować. Podpowiedzi 1) Sprawdzenie jakiej klasy jest obiekt może być dokonane za pomocą metody iskindofclass if ([maszyna iskindofclass:[maszynamulti class]]){ n=20; Zadanie 5 Dodaj do klasy MaszynaLotto metodę -(void)losujwszystkie; W metodzie tej wylosuj i wypisz n liczb. n ma być określone jako właściwość klasy (ustawiana w inicjalizatorze). W metodzie main z zadania 4 rzutuj wszystkie obiekty na typ MaszynaLotto* i spróbuj na takim obiekcie uruchomić tę metodę. Do poszczególnych klas dodaj nowe implementacje metody losujwszystkie, tak aby wypisywały informację o typie losowania a następnie wywoływały przeładowaną metodę. Podpowiedzi 1) Modyfikacja meody main powinna wyglądać tak MaszynaLosujaca * maszyna = (MaszynaLosujaca*)[maszyny objectatindex:(arc4random()%maszyny.count)]; [maszyna losujwszystkie]; 2) metoda losujwszystkie ma korzystać w właściwości ilosc @property(atomic) int ilosc; 3) Przeładowanie metody losujwszystkie w klasie MaszynaMultiMulti -(void)losujwszystkie{ printf("%s\n","multimulti"); [super losujwszystkie]; Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 4/5 20/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Zadania samodzielne Zadanie 6 Utworzyć klasę ONP obliczającą wartość wyrażenia podanego w odwrotnej notacji polskiej. W tym celu należy wykorzystać strukturę stosu. W metodzie main() pobierz ze standardowego wejścia ciąg znaków. Następnie zainicjuj instancję klasy ONP z wykorzystaniem jedynego konstruktora przyjmującego jako parametr obiekt NSString* zawierający wyrażenie. Ponadto klasa powinna posiadać metodę wyznaczwartosc, która zwróci wartość wyrażenia. Należy założyć, że w wyrażeniu będą tylko liczby całkowite, jeden operator jednoargumentowy - zmieniający znak liczby oraz dwa operatory dwuargumentowe + i * reprezentujące dodawanie i mnożenie. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 5/5 21/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

#import "Fraction.h" #import <stdio.h> @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; if ( self ) { [self setnumerator: r: n anddenominator: d]; return self; -(void) print { printf( "%i/%i", numerator, denominator ); -(void) setnumerator: (int) n { numerator = n; -(void) setdenominator: (int) d { denominator = d; Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C Wykład 2 Unikalne nazwy klas wewnątrz aplikacji Aplikacji / użytych frameworków / całego Objective-C Prefiksy -(void) setnumerator: (int) n anddenominator: (int) d { numerator = n; denominator = d; Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) 2 Nazewnictwo klas Nazwy metod Własne klasy 3 literowe prefiksy. RAB - Rovio, aplikacja Angry Birds UPZ - UMK, aplikacja Planer Zajęć Jasne znaczenie i unikalne nazwy wewnątrz klas. stringafterfindingandreplacingalloccurrencesoft hisstring:withthisstring: Reszta jasno ma pokazywać co klasa reprezentuje RABAnimation UPZTable 3 strreplacingstr:str: stringbyreplacingoccurrencesofstring:withstring: 4 Zmienne Nazwy metod zgodne z konwencją Unikalne wewnątrz tego samego zakresu int interestingnumber = 42; int interestingnumber = 44; Przy tworzeniu klasy zgodnej z protokołem Przy tworzeniu metod typu getter i setter Tworzenie obiektów Alloc + init int interestingnumber = 42; { int interestingnumber = 44; 5 new Metody fabrykujące 6 22/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Właściwości obiektu Ustawianie i pobieranie stanu właściwości obiektu z wykorzystaniem syntaktyki. -(type)propertyname -(void)setpropertyname:(type) Właściwości zadeklarowane Składnik klasy posiadający cechy pola i metody Sposób na zastąpienie deklaracji i implementacji metod get i Set Deklaracja @property w interfejsie klasy. Typ, nazwa, zachowanie 7 8 Właściwości zadeklarowane Każda właściwość specyfikuje metody o nazwach: nazwawlasciwosci (odczyt) setnazwawlasciwosci: (zapis) Właściwości zadeklarowane W implementacji klasy należy użyć dyrektywy kompilatora @synthesize, aby wygenerować te metody. 9 10 Właściwości zadeklarowane Oszczędzają czas Ułatwiają stworzenie metod typu pobierz/ustaw Zachowanie właściwości readonly - readwrite @property (getter=isfinished) BOOL finished; 11 12 23/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Zachowanie właściwości @property (atomic) NSObject Metody getter / setter zapewniają, że operacje na tych właściwościach będą wykonane atomowo, w przypadku jednoczesnego wywołania z różnych wątków Właściwości (Properties) Standardowo atomic atomic nie znaczy bezpieczny dla wątków. nonatomic pobieranie i ustawianie bez gwarancji. 13 14 Lazy accessor Opóźnienie inicjalizacji obiektu Przechowywanie obiektów Na stosie Tak długo, dopóki mamy do nich dostępne wskaźniki. Praca z własną instancją zmiennej Jeśli kompilator sam generuje którąkolwiek z metod dostępowych, to generuje również tą zmienną. Jeśli nie, to sami jesteśmy odpowiedzialni za tą zmienną. 15 16 Przechowywanie obiektów Przechowywanie obiektów 17 18 24/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Przechowywanie obiektów Silne referencje 19 20 Silne referencje Słabe referencje Słaba referencja nie implikuje własności i odpowiedzialności między obiektami i nie utrzymuje takiego obiektu przy życiu. 21 22 Słabe referencje Słaba referencja nie implikuje własności i odpowiedzialności między obiektami i nie utrzymuje takiego obiektu przy życiu. Deklarowanie właściwości Domyślne Atrybut strong jest domyślny Słabe 23 24 25/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Lokalne zmienne Również są domyślnie strong Zmienne lokalne słabe Taką zmienną można również zadeklarować jako zmienną słabą. Zmienna zachowuje silną referencję tak długo Aż jest dostępna w zasięgu widoczności. Aż zostanie wykonane przypisanie nowego obiektu albo nil. 25 Istnieje szansa, że obiekt może zostać usunięty z pamięci (jeśli zostaną usunięte do niego referencje silne. Wówczas zmienna jest ustawiana na nil. 26 Zmienne lokalne słabe Do zmiennej jest jakaś silna referencja (copy) Aby Właściwość była zawsze przechowywana w silnej własnej kopii (strong) Obiekt zostanie usunięty po usunięciu silnej referencji Do zmiennej nie ma silnej referencji Obiekt zostanie usunięty od razu po zaalokowaniu. 27 28 (copy) Protokoły Obiekt, który przypisywany do zmiennej takiej właściwości musi Deklarują metody, które mogą być zaimplementowane przez klasę. Być zgodny z protokołem NSCCopying Deklarują interfejs Klasa może być zgodna z Protokołem poprzez implementację zadeklarowanych w nim metod. czyli dać się skopiować 29 Przykład: Używane do implementowania metod potrzebnych w obiektach wykorzystywanych później do różnych celów (np. delegaty) 30 26/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Protokoły Deklaracja protokołu Deklaracja, że klasa będzie implementowała / będzie zgodna z protokołem Nie ma zmiennych instancji Nie mają klasy bazowej Odpowiednie metody muszą być zdefiniowane 31 32 Deklaracja użycia protokołu Deklaracja protokołu Obiekt może być klasy dowolnej Ale musi być zgodny z protokołem! Mogą specyfikować metody wymagane i opcjonalne. 33 34 Użycie metody opcjonalnej W przypadku chęci skorzystania z metody opcjonalnej, należy sprawdzić, czy obiekt ją implementuje Dziedziczenie protokołów Protokoły mogą dziedziczyć, Tzn. Jeden protokół musi być musi być zgodny z drugim. 35 36 27/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Modyfikacja istniejących klas Deklaracja kategorii Dodanie metody do istniejącej klasy Użycie kategorii Nawet jeśli nie mamy dostępu do implementacji klasy oryginalnej XYZPerson+XYZPersonNameDisplayAdditions.h Nie ma różnicy w stosunku do standardowo zmodyfikowanego kodu implementacji klasy. 37 38 Implementacja kategorii XYZPerson+XYZPersonNameDisplayAdditions.m Użycie kategorii.m 39 40 Kategorie a nazewnictwo metod Nie jest zdefiniowane która metoda zostanie wykonana, jeśli nazwy metod powtórzą się w obrębie Klasy - Kategorii Kategorii 1 - kategorii 2 Należy uważać, szczególnie przy tworzeniu metod dla klas obcych. Problem również w przypadku kompilacji kodu z nowszymi wersjami Klas frameworków. 41 Kategorie a nazewnictwo metod Nie jest zdefiniowane która metoda zostanie wykonana, jeśli nazwy metod powtórzą się w obrębie Klasy - Kategorii Kategorii 1 - kategorii 2 Należy uważać, szczególnie przy tworzeniu metod dla klas obcych. Problem również w przypadku kompilacji kodu z nowszymi wersjami Klas frameworków. 42 28/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Rozszerzenia klas Rozszerzenia klas Kategorie anonimowe Pozwalają na dodanie do klasy własnych właściwości i zmiennych instancji Deklarowane w bloku implementacji oryginalnej klasy. 43 Deklarowane w bloku implementacji oryginalnej klasy. 44 Użycie rozszerzania klas do ukrywania prywatnych elementów klasy Pierwotny interfejs klasy jest używany do zdefiniowania zachowania i interakcji z klasą jako interfejs publiczny Rozszerzenie klasy dodaje do niej prywatne metody, do użycia wewnątrz jej implementacji. Użycie rozszerzania klas do ukrywania prywatnych elementów klasy Pierwotny interfejs Rozszerzenie Redeklaracja zmiennych 45 46 Użycie rozszerzania klas do ukrywania prywatnych elementów klasy Kompilator wygeneruje metody Getter jako publiczną Setter jako prywatną, dostępną wewnątrz klasy. Bloki Element języka. Oznaczany znakiem karetki ^ Prywatność zapewniana jest przez zadeklarowanie rozszerzenia klasy wewnątrz kodu źródłowego implementacji Klasy. 47 48 29/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Bloki Można zadeklarować zmienną (podobnie jak wskaźnik do funkcji), która będzie skojarzona z blokiem. Bloki Można wywołać wykonanie bloku. Można przekazać blok jako argument metody Są obiektami, więc można je wstawić na przykład do kolekcji 49 50 Bloki Mogą przyjmować argumenty i zwracać wartości Bloki Można przechwycić wartości zmiennych widocznych w zakresie, w którym definiowany jest blok. 51 52 Bloki Blok przechwytuje wartości zmiennych Wartość oryginalnej zmiennej jest nietknięta Blok nie może zmienić wartości oryginalnej zmiennej Blok nie może zmienić wartości zmiennej przechwyconej (zadeklarowana jako const) block Variables Modyfikator pozwalający na współdzielenie dostępu do zmiennej pomiędzy oryginalną metodą a blokiem 53 54 30/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Blok jako argument metody Właściwość dla bloku Dobra praktyka jeden blok jako ostatni argument 55 56 Zakończenie KONIEC 57 31/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Temat 3. Projektowanie interfejsu użytkonwnika Kalkulator pierwszy program dla IOS Wymagana wiedza wstępna: 1) Student musi 1) Umieć stworzyć projekt aplikacji konsolowej w XCode z wykorzystaniem Objective-C 2) Umieć skompilować i uruchomić program w XCode 3) Skorzystać z podstawowych klas i funkcji Objective-C 4) Nauczyć się zasad wywoływania metod w Objective-C 5) Znać język C 6) Znać zasady zarządzania pamięcią w komputerze 7) Znać pojecie wskaźnika 8) Znać podstawowe narzędzia tworzenia aplikacji konsolowych w C 9) Znać jezyk Java lub C# lub C++ 10) Umieć tworzyć klasy Objective-C 11) Umieć tworzyć hierarchę klas w Objective-C 12) Umieć wykorzystywać późne wywołanie metod w Objective-C 13) Umieć korzystać z kolekcji 2) Student powinien 1) Umieć tworzyć własne inicjalizatory 2) Znać typ id Cel dydaktyczny 1) Student musi 1) Umieć tworzyć i konfigurować projekty IOS 2) Korzystać z StoryBoard i rozmieszczać elementy na Widokach 3) Umieć stworzyć własny kontroler widoku 4) Tworzyć referencje do obiektów znajdujących się na widoku 5) Obsługiwać domyślne interakcje z obiektami za pomocą własnych metod 6) Znać zasady korzystania z @property i @synthesize 2) Student może 1) Umieć tworzyć własne kontrolki 2) Znać zasady wykorzystania ARC 3) Znać zasady wykorzystania delegatów Zakres tematyczny wykładu laboratorium Niniejsze zajęcia naświetlą sposób tworzenia i uruchamiania aplikacji na urządzenia mobilne pracujące pod kontrolą systemu IOS. Pokażą również jak korzystać z symulatora IOS. Zostanie poruszony temat dostępnych kontrolek systemowych oraz sposoby korzystania z nich. Składniki dobrej aplikacji Xcode Struktura kodu aplikacji IOS Deployment target i wersje Xcode i IOS framework Kompilatory - GCC / LLVM ARC - automatyczne zliczanie referencji Kolejność projektowania interfejsu - samowystarczalne widoki Połączenie między kontrolerem widoku (ViewController) a elementami UI. Apple Mobile Device Programming - 1/5 32/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

UIKit - podstawy Załączniki 1. Prezentacja_3.pdf slajdy z prezentacji 2. Tworzenie_aplikacji_iPhone.mp4 - film pokazujący jak stworzyć prosty program w Xcode z uwzględnieniem dodania elementów interfejsu użytkownika i obsługi związanych z nimi akcji. Exercises Exercise 1 Stwórz projekt pustej aplikacji iphone (Single View Application). Na automatycznie stworzonym widoku ustaw obiekty z biblioteki kontrolek 1) UIButton - przyciski cyfr i działań 2) UITextField - wyświetlanie wyniku Podpowiedzi 1) Widok możemy edytować otwierając domyślnie stworzony plik MainStoryBoard.storyboard 2) Obiekty umiesczamy na widoku poprzez przeciągnięcie ich z biblioteki obiektów Apple Mobile Device Programming - 2/5 33/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Zadanie 2 Stwórz własną klasę KalkViewController, i ustaw ją jako kontrolera widoku kalkulatora. Podpowiedzi 1) Klasa powinna dziedziczyć z UIViewController #import <UIKit/UIKit.h> @interface UMKTViewController : UIViewController @end 2) Ustawienia klasy jako kontrolera należy wykonać w oknie właściwości widoku. Zadanie 3 Zaimplementuj metody WcisniencieCyfry i WcisnienicieDzialania i skojarz je z odpowiednimi przyciskami. Dodaj ReferencingOutlet do pola tekstowego. Podpowiedzi Apple Mobile Device Programming - 3/5 34/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

1) Skojarzenie akcji z metodą następuje poprzez przeciągnięcie akcji z listy akcji do kodu metody w klasie kontrolera. 2) Dodaj pola wynik, dopisujemy i dzialanie, aby pamiętać, jaki jest aktualny wynik i jakie jest aktualne działanie i czy jesteśmy w trybie wpisywania liczby, czy już zaczynamy następną #import <UIKit/UIKit.h> @interface UMKTViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *PoleLiczbowe; @property (atomic) double wynik; @property (atomic) bool dopisujemy; @property (atomic) int dzialanie; - (IBAction)WicisniecieCyfry:(id)sender; - (IBAction)wcisnieciedzialania:(id)sender; @end Apple Mobile Device Programming - 4/5 35/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

3) W przypadku wciśnięcia cyfry sprawdź, który przycisk został wciśnięty (na podstawie tekstu na nim umieszczonego - (IBAction)WicisniecieCyfry:(id)sender { UIButton* b = (UIButton*)sender; if(self.dopisujemy){ self.poleliczbowe.text= [NSString stringwithformat:@"%@%@", self.poleliczbowe.text, b.titlelabel.text]; else{ self.dopisujemy=true; self.poleliczbowe.text = b.titlelabel.text; 4) W przypadku wciśnięcia przycisku = wykonaj obliczenie, korzystając z klas stworzonych na ćwiczeniach nr 1. Zadania samodzielne Zadanie 1 Dodaj do kalkulatora przycisk wstecz. Zaimplementuj za pomocą NSMutableArray nieskończoną pamięć Zadanie 2 Dodaj obsługę dzielenia przez 0 Zadanie 3 Dodaj przycisk Pamięć i Zerowanie wraz z odpowiednią funkcjonalnością. Apple Mobile Device Programming - 5/5 36/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

#import "Fraction.h" #import <stdio.h> @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; if ( self ) { [self setnumerator: r: n anddenominator: d]; return self; -(void) print { printf( "%i/%i", numerator, denominator ); -(void) setnumerator: (int) n { numerator = n; -(void) setdenominator: (int) d { denominator = d; -(void) setnumerator: (int) n anddenominator: (int) d { numerator = n; denominator = d; Programowanie dla iphone projektowanie interfejsu użytkownika Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) Wykład 3 Składniki dobrej aplikacji Wspaniała Innowacyjna Zoptymalizowana Łącząca Dostępna Zlokalizowana Zaprojektowana 2 Wspaniała Dobre pierwsze wrażenie Intuicyjna (praca z nią powinna być oczywista) Wciągająca Umożliwia robienie rzeczy, które dotychczas nie były możliwe Ekscytująca Innowacyjna 3 4 Innowacyjna Zoptymalizowana Wysoka jakość Wysoka wydajność Zintegrowana z funkcjonalnością telefonu. Specyficzna dla IOS??? 5 6 37/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Łącząca iphone + ipad + imac Uzupełniające się części Synchronizująca się zawartość. Dostępna Każdy może tego użyć Dla osób upośledzonych 1 na 5 użytkowników. Wprowadzona do frameworków IOS 7 8 Zlokalizowana Dostępna w różnych językach Dobrze zaprojektowana Jak wygląda? Jak działa? Niech działa jak magia. Niech ipad będzie notatnikiem albo mapą. 9 10 Wymagania Mac Xcode Urządzenie IOS do testowania. 11 12 38/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

XCode XCode Tworzenie aplikacji Projektowanie Interfejsu użytkownika Testowanie Optymalizacja Publikowanie w AppStore. 13 14 Deployment target Kompilator Starać się używać najnowszych (aktualna i poprzednia) Kiedyś GCC Aktualnie LLVM Szybki (2xgcc) Lepsza optymalizacja kodu ARC Inne nowe możliwości języka 15 16 Storyboarding Nawigacja i ekrany aplikacji powinny być określone na początku Każdy widok powinien być samowystarczalny. Xcode pierwsza aplikacja Domyślnie zdefiniowany jest jeden widok początkowy. 17 18 39/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Okno główne Gdzie startuje aplikacja? Funkcja main w main.m UIApplicationMain @autoreleasepool 19 20 Tworzenie Interfejsu Użytkownika Kontrolki UI Navigation Bar Toolbar Tab Bar Image View Map View Table View Buttons Alerts 21 22 Kontrolki UI Outlets Text Field Search Bar Scope Bar Segmented Control RefreshControll Slider Stepper Switch 23 Połączenie między kontrolerem widoku (ViewController) a elementami UI. W zasadzie: połączenie między dwoma obiektami. 24 40/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Projekt aplikacji Papierowy prototyp Widok aplikacji zamienić to wszystko na aplikację UIKit Jak zaprojektować aplikację Żeby zaoszczędzić czas Żeby jak najlepiej spożytkować kod. 25 26 View Controller View Controller // Blok budujący aplikację. View prezentacja danych dla aplikacji Całość aplikacji to hierarchia widoków. View Cotrollers System elementy SDK Content tworzone samodzielnie Containers - Widoki i przepływ aplikacji. View Controller nie powinien być zależny od innych widoków. 27 28 System Controlers Okienko Twiettera Wybór obrazu Tworzenie wiadomości e-mail Content controllers Tabela Widok specyficzny dla aplikacji 29 30 41/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Container controllers Pasek przycisków Split View (master detail) Przejścia między controlerami. IOS>5 Container Master Detail (Split View Controller) 31 32 Split View Controller Container Controller Root View Controller Navigation View Controller Detail View Controller Podklasa UIViewController Dodawanie view Controllers Container to view controller Automatyczne przekazywanie wywołań metod (typu widok został załadowany itp.) 33 34 Przykład Architektura Container view controller Enkapsulacja dzieci Uważać na hierarchię kontrolerów Nie tworzyć cykli przejść 35 36 42/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Dobrze zaprojektowany widok Zakończenie KONIEC 37 38 43/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Temat 4. Storyboard i element interfejsu użytkownika Gra w kulki- część 1 Wymagana wiedza wstępna: 1) Student musi 1) Umieć stworzyć projekt aplikacji konsolowej w XCode z wykorzystaniem Objective-C 2) Umieć skompilować i uruchomić program w XCode 3) Skorzystać z podstawowych klas i funkcji Objective-C 4) Nauczyć się zasad wywoływania metod w Objective-C 5) Znać język C 6) Znać zasady zarządzania pamięcią w komputerze 7) Znać pojecie wskaźnika 8) Znać podstawowe narzędzia tworzenia aplikacji konsolowych w C 9) Umieć tworzyć klasy Objective-C 10) Umieć tworzyć hierarchę klas w Objective-C 11) Umieć wykorzystywać późne wywołanie metod w Objective-C 12) Umieć korzystać z kolekcji 13) Umieć tworzyć własne inicjalizatory 14) Umieć tworzyć i konfigurować projekty IOS 15) Korzystać z StoryBoard i rozmieszczać elementy na Widokach 16) Umieć stworzyć własny kontroler widoku 17) Tworzyć referencje do obiektów znajdujących się na widoku 18) Obsługiwać domyślne interakcje z obiektami za pomocą własnych metod 19) Znać zasady korzystania z @property i @synthesize 2) Student powinien 1) Znać jezyk Java lub C# lub C++ 2) Znać zasady działania delegatów i hostów 3) Znać typ id Cel dydaktyczny 1) Student musi 1) Umieć definiować przejścia (Segue) i z nich korzystać 2) Umieć otwierać i zamykać widoki modalne za pomocą przejść 3) Tworzyć własne klasy rozszerzające kontrolki z UIKit 4) Dodawać i usuwać obiekty z widoku za pomocą kodu 5) Znać zasady korzystania z @property i @synthesize 2) Student powinien 1) Rozumieć ideę MVC - model - view - controller 2) Rozumieć ideę delegata dla widoku (kontrolera) Zakres tematyczny wykładu laboratorium Niniejsze zajęcia pokażą w jaki sposób tworzyć wielowidokowe aplikacje dla urządzeń IOS. Pokazane zostaną sposoby tworzenia własnych widoków, przeładowywania klas widoków, tworzenia własnych kontrolerów widoków. Pokazane zostaną zasady geometrii w UIKit. Storyboarding - etapy tworzenia nawigacji i struktury aplikacji Samowystarczalność widoków. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 1/7 44/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Przejścia (segue) zdefiniowane pomiędzy kolejnymi widokami. Przekazywanie danych między scenami i przesyłanie danych spowrotem - wykorzystanie delegatów i hostów Kontrolki UIKit Hierarchia klas kontrolek - UIView jako cegiełka budowy aplikacji Właściwości UIView Koordynaty UIView Wymiary ekranów urządzeń Apple UIView zarządzanie widokiem i podwidokami UIView zdarzenia akcji - UIResponder Geometria widoków (frame, bounds, center) Tworzenie widoku z pomocą StoryBoard i programistycznie Programistycznie Tworzenie podklas UIView Metody inicjalizacyjne, rysowania i wyglądu podklasy UIView Alternatywy dla tworzenia podklas Wydajność widoków Praca z dotykiem widoku Załączniki 1. Prezentacja_4.pdf - slajdy prezentacji wykładu 2. Praca ze storyboard.mp4 - film pokazujący jak edytować StoryBoard i tworzyć przejścia między widokami. Zadania na Laboratorium Stwórz projekt gry Uciekająca kulka Zasady gry. Gra polega na śledzeniu i blokowaniu ruchów kulki. Kulka porusza się w losowo wybranym kierunku. Jeśli wypadnie poza krawędź ekranu, gra kończy się. Aby zapobiec wypadnięciu, należy na krawędzi ekranu ustawić blokadę, tak aby przeciąć tor ruchu kulki. Kulka odbije się od blokady i będzie kontynuowała ruch w nowym kierunku. Program ma rozpoczynać się od menu, w którym można rozpocząć grę. Po przegranej, gra ma powrócić do menu. Zadanie 1. Stwórz nowy projekt aplikacji (SingleView) dla iphone. Do StoryBoard dodaj 2 widoki. Stwórz 2 klasy dziedziczące z UIViewController, odpwiedzialne za pracę z tymi widokami. 1) MainView - MainViewController 2) GameView - GameViewController Widok MainView ma być widokiem startowym. W widoku GameView stwórz referencję do obsługiwanego widoku Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 2/7 45/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Podpowiedzi 1) Po dodaniu widoku do StoryBoard, klasę Kontrolera wybieramy we właściwościach Widoku, umieszczonych w prawym panelu XCode. 2) Zanim ustawimy klasę jako klasę Kontrolera Widoku, należy upewnić się, czy taką klasę posiadamy (klasa musi dziedziczyć z UIViewController i być dodana do projektu) 3) Referencję do widoku stworzymy przeciągając pole Referencing Outlet z jego właściwości do kodu kontrolera widoku. Zadanie 2. W widoku MainView dodaj przycisk, pełniący funkcję uruchamiania gry ( Rozpocznij grę ). Dodaj do niego akcję kliknięcia, zakładając, że delegatem jest MainViewController. Między MainView a widokiem gry dodaj modalne przejście (Segue) i nazwij je sgame Zaprogramuj wykonanie tego przejścia po dotknięciu przycisku. Podpowiedzi. 1) Przyciski i elementy dodajemy do widoku, przeciągając je z biblioteki dokumentów 2) Aby dodać Segue przeciągnij prawym przyciskiem myszy między widokami. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 3/7 46/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

3) Identyfikator Segue jest bardzo ważny - za jego pomocą wybieramy przejścia do kolejnych widoków 4) Aby dodać kod obsługi zdarzenia dla przycisku, należy przeciągnąć odpowiednią akcję z listy możliwych zdarzeń na okno z kodem Controlera widoku zawierającego przycisk. 5) Kod uruchamiający wybrane przejście to uruchomiona na obiekcie klasy Kontrolera widoku metoda: performseguewithidentifier:sender: - (IBAction)StartGame:(id)sender { [self performseguewithidentifier:@"sgame" sender:self]; Zadanie 3. Dodaj do StoryBoard kolejne kilka widoków (i odpowiadające im klasy Kontrolerów Widoków) 1) HelpViewController i HelpVIew 2) AboutViewController i AboutView 3) TopScoresViewController i TopScoresView Do każdego z widoków dodaj przejścia, na każdym z nich wstaw przycisk pozwalający na powrót do poprzedniego widoku. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 4/7 47/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Podpowiedzi 1) Każdy przycisk powinien mieć oprogramowaną akcję w klasie Kontrolera widoku na którym jest umieszczony 2) Kod akcji zamknięcia widoku powinien być wykonany na obiekcie kontrolera tego widoku i ma postać [self dismissviewcontrolleranimated:yes completion:nil]; Zadanie 4. Stwórz klasę Kulka, dziedziczącą z klasy UIImageView. W inicjalizaotrze załaduj plik z obrazkiem kulki i wstaw go do własnego widoku. Stworzony obiekt tej klasy dodaj do widoku GameView. Podpowiedzi 1) Jeżeli obiekt nowej klasy ma być umieszczany na widoku, powinien dziedziczyć z klasy UIView (lub pośrednio z niej dziedziczyć - UIImageView spełnia ten warunek) #import <UIKit/UIKit.h> @interface Kulka : UIImageView @end 2) Do klasy kulki należy dodać pole, w którym będzie przechowywany obrazek prezentujący kulkę. Przez wzgląd na późniejsze zadania, należy wykorzystać tu typ UIIMageView. Obiekt przechowywany w tym polu będzie później dodany jako podwidok widoku kulki. Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 5/7 48/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

W pliku nagłówkowym @property(nonatomic, retain) UIImageView * iv; W pliku źródłowym @synthesize iv; 3) W standardowo zaimplementowanej w klasie funkcji initwithframe należy dodać kod inicjalizujący i umieszczający obrazek kulki. - (id)initwithframe:(cgrect)frame { UIImage* i = [UIImage imagenamed:@"b_green.png"]; UIImageView * tiv = [[UIImageView alloc]initwithimage:i]; [tiv setframe: CGRectMake( tiv.frame.origin.x, tiv.frame.origin.y, tiv.frame.size.width/4, tiv.frame.size.height/4)]; self = [super initwithframe: CGRectMake( 230, 200, tiv.frame.size.width, tiv.frame.size.height)]; if (self) { self.iv = tiv; [self addsubview:iv]; return self; 4) Pamiętaj, że aby wykorzystać grafikę, należy 1) Dodać ją do projektu 2) Zawsze dodawać dwie wersje - plik.rozszerzenie - w zwykłej rozdzielczości i plik@2x.rozszerzenie w rozdzielczości dwukrotnie większej dla wyświetlaczy retina 3) Korzystać w kodzie z nazewnictwa dla standardowej rozdzielczości 4) Przy dodawaniu grafiki do projektu zadbać o to, aby były zaznaczone cele (Target), w których paczkach grafika ma być zawarta 5) Zadbać o to, aby nazwy plików były unikalne w obrębie całego projektu (nieistotne nazewnictwo katalogów) 5) Dodanie obiektu kulki do widoku gry sprowadza się do zainicjalizowania go i dodania za pomocą funkcji addsubview: k= [[UMKKULKIKulka alloc]init]; self.widok addsubview:k]; Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 6/7 49/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne

Zadania samodzielne. Zadanie 1. Uzupełnij bezpośrednio na StoryBoard widoki AboutView - o opis autora programu i HelpView o instrukcję programu. Skorzystaj z obietów z biblioteki obiektów. Zadanie 2. Dodaj do GameView (za pomocą kodu) obiekt ImageViewController z teksturą. Zadbaj o to, aby obiekt ten był zawsze w odległości 20 pikseli od krawędzi ekranu, oraz odpowiednią kolejność elementów na ekranie. Zadanie 3. Dodaj do GameView właściwość Ograniczenie, dziedziczący z UIImageView, wyświetlający kwadrat i zadbaj aby był umieszczony na samym dole hierarchii obiektów Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 7/7 50/173 Programowanie Urządzeń Mobilnych Apple - materiały dydaktyczne