tytuł oryginału: the ios 5 developer's cookbook · spis treci 11 okrelenie bazowej wersji...

62

Upload: tranhanh

Post on 28-Feb-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204
Page 2: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Tytuł oryginału: The iOS 5 Developer's Cookbook: Core Concepts and Essential Recipes for iOS Programmers (3rd Edition)

Tłumaczenie: Robert Górczyński (wstęp, rozdz. 2 – 15), Łukasz Suma (rozdz. 1)

ISBN: 978-83-246-5121-4

Authorized translation from the English edition, entitled: THE IOS 5 DEVELOPER’S COOKBOOK: CORE CONCEPTS AND ESSENTIAL RECIPES FOR IOS PROGRAMMERS, Third Edition; ISBN 0321832078; by Erica Sadun; published by Pearson Education, Inc, publishing as Addison Wesley.Copyright © 2012 by Pearson Education, Inc.

All rights reserved. No part of this book may be reproduced od transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

Polish language edition published by HELION S.A., Copyright © 2013.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletnei rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/ios5pp.zip

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/ios5ppMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis treści

Podzi�kowania .......................................................................................... 21

O autorce .................................................................................................. 22

Wst�p ....................................................................................................... 23

1 Wprowadzenie do iOS SDK ......................................................................... 33Programy twórców iOS ..............................................................................................33

Online Developer Program ...................................................................................33Standard Developer Program ...............................................................................34Developer Enterprise Program .............................................................................35Developer University Program ..............................................................................35Rejestracja ........................................................................................................35

Rozpocz�cie pracy ...................................................................................................35Pobieranie SDK ..................................................................................................36Urz�dzenia do tworzenia aplikacji .........................................................................37Ograniczenia symulatora .....................................................................................38Pod��czenie urz�dzenia do komputera ..................................................................40

Ró�nice pomi�dzy modelami .....................................................................................41Wymiary ekranu ..................................................................................................41Kamera .............................................................................................................42D�wi�k ...............................................................................................................42Telefonia ...........................................................................................................43Ró�nice zwi�zane z Core Location i Core Motion ...................................................43Obs�uga wibracji i zbli�enia ..................................................................................44Szybko�ci procesorów .........................................................................................44OpenGL ES ........................................................................................................44

Ograniczenia platformy .............................................................................................45Ograniczenia przestrzeni na dane .........................................................................45Ograniczenia dost�pu do danych ..........................................................................45Ograniczenia pami�ci ..........................................................................................46Ograniczenia interakcji ........................................................................................50Ograniczenia energetyczne ..................................................................................50Ograniczenia aplikacji .........................................................................................51Ograniczenia mo�liwo�ci dzia�a� u�ytkownika ........................................................52

Page 4: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

8 iOS 5. Podr�cznik programisty

Ograniczenia SDK ....................................................................................................52Korzystanie z serwisu Provisioning Portal ...................................................................53

Zdefiniowanie zespo�u ........................................................................................54Uzyskiwanie certyfikatów .....................................................................................54Rejestrowanie urz�dze� ......................................................................................55Rejestrowanie identyfikatorów aplikacji .................................................................56Akredytacja ........................................................................................................57

Sk�adanie projektów iPhone w ca�o� ........................................................................58Szkielet aplikacji iPhone ......................................................................................60main.m ..............................................................................................................61Delegat aplikacji .................................................................................................63Kontroler widoku ................................................................................................65Uwaga na temat przyk�adowego kodu prezentowanego w tej ksi��ce .......................66

Komponenty aplikacji iOS .........................................................................................67Hierarchia katalogów aplikacji ..............................................................................67Plik wykonywalny ................................................................................................67Plik Info.plist ......................................................................................................68Ikona i obrazy rozruchowe ...................................................................................69Pliki narz�dzia Interface Builder ...........................................................................72Pliki nienale��ce do paczki aplikacji .....................................................................72Archiwa IPA ........................................................................................................73Piaskownice .......................................................................................................74

Paradygmaty programowania ....................................................................................74Programowanie zorientowane obiektowo ...............................................................75Model-widok-kontroler .........................................................................................75

Podsumowanie ........................................................................................................83

2 Obóz treningowy Objective-C ..................................................................... 85J�zyk programowania Objective-C ..............................................................................85Klasy i obiekty .........................................................................................................86

Tworzenie obiektów ............................................................................................88Alokacja pami�ci ................................................................................................88Zwalnianie pami�ci .............................................................................................89Licznik u�ycia obiektu .........................................................................................90

Metody, wiadomo�ci i selektory ................................................................................90Niezadeklarowane metody ...................................................................................91Wska�nik do obiektu ...........................................................................................92Dziedziczenie metod ...........................................................................................93Deklarowanie metod ...........................................................................................93Implementacja metody ........................................................................................93Metody klasy ......................................................................................................95Szybkie wyliczenie ..............................................................................................96

Hierarchia klas ........................................................................................................97Wy�wietlanie informacji ............................................................................................98Podstawy zarz�dzania pami�ci� ..............................................................................100

Zarz�dzanie pami�ci� poprzez MRR ...................................................................100Zarz�dzanie pami�ci� za pomoc� technologii ARC ...............................................103

Page 5: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 9

W�a�ciwo�ci ..........................................................................................................104Hermetyzacja ...................................................................................................105Zapis z u�yciem kropki ......................................................................................105W�a�ciwo�ci i zarz�dzanie pami�ci� ...................................................................105Deklaracja w�a�ciwo�ci .....................................................................................106Tworzenie w�asnych metod typu getter i setter ....................................................108Kwalifikatory w�a�ciwo�ci ..................................................................................110Funkcja KVC .....................................................................................................111Funkcja KVO .....................................................................................................112Technologia MRR i du�a warto� licznika u�ycia ..................................................112Inne sposoby tworzenia obiektów .......................................................................113Usuwanie obiektu z pami�ci ..............................................................................114

U�ywanie bloków ....................................................................................................117Definiowanie bloku w kodzie ..............................................................................118Przypisywanie odniesie� do bloku ......................................................................119Blok i zmienne lokalne ......................................................................................120Blok i typedef ...................................................................................................120Bloki i zarz�dzanie pami�ci� w technologii MRR ..................................................121Inne u�ycie bloków ............................................................................................121

Technologia ARC ....................................................................................................121Kwalifikatory w�a�ciwo�ci i zmiennych ................................................................122Licznik odniesie� ..............................................................................................125Pula zwalniana automatycznie ...........................................................................127

Stosowanie technologii ARC — za i przeciw .............................................................128Migracja do ARC ...............................................................................................128Wy��czenie ARC w projekcie ..............................................................................129Wy��czenie ARC dla poszczególnych plików .........................................................130Utworzenie projektu niezgodnego z ARC na bazie szablonu w Xcode .....................130

Regu�y dotycz�ce ARC ............................................................................................131U�ycie technologii ARC wraz z Core Foundation i rzutowaniem typów danych ...............132

Rzutowanie pomi�dzy Objective-C i Core Foundation ............................................132Wybór odpowiedniego podej�cia ........................................................................134Rozwi�zania stosowane w trakcie dzia�ania aplikacji ............................................134Wskazówki i podpowiedzi dotycz�ce pracy z ARC .................................................135

Wzorzec Singleton ..................................................................................................136Kategorie (rozszerzenia klas) ..................................................................................137Protoko�y ...............................................................................................................138

Definiowanie protoko�u .....................................................................................138Stosowanie protoko�u .......................................................................................139Dodanie wywo�a� zwrotnych ..............................................................................139Deklaracja opcjonalnych wywo�a� zwrotnych ........................................................140Implementacja opcjonalnych wywo�a� zwrotnych .................................................140Zgodno� z protoko�em .....................................................................................141

Klasy Foundation ...................................................................................................142Ci�gi tekstowe .................................................................................................142Liczby i daty .....................................................................................................147Kolekcje ..........................................................................................................149

Page 6: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

10 iOS 5. Podr�cznik programisty

I jeszcze jedno: przekazywanie wiadomo�ci ..............................................................154Implementacja przekazywania wiadomo�ci ..........................................................155Operacje czyszcz�ce .........................................................................................156Super�atwe przekazywanie .................................................................................157

Podsumowanie ......................................................................................................157

3 Budowanie pierwszego projektu ............................................................... 159Utworzenie nowego projektu ...................................................................................159Utworzenie aplikacji na podstawie szablonu .............................................................161

Utworzenie nowego projektu ..............................................................................161Wprowadzenie do przestrzeni roboczej Xcode ......................................................164Przegl�d projektu ..............................................................................................169Otwórz plik Storyboard dla iPhone’a ...................................................................170Edycja widoku ..................................................................................................171Uruchomienie aplikacji ......................................................................................173

U�ywanie symulatora ..............................................................................................174Symulator — co si� dzieje w tle? .......................................................................175Wspó�dzielenie aplikacji symulatora ...................................................................177

Minimalistyczna wersja aplikacji typu Witaj, �wiecie ..................................................178Przegl�danie API SDK .......................................................................................180

Konwersja plików modu�u Interface Builder na ich odpowiedniki w Objective-C ............181U�ywanie modu�u usuwania b��dów .........................................................................183

Ustawienie punktu kontrolnego ..........................................................................184Wy�wietlenie panelu modu�u usuwania b��dów ...................................................185Analiza etykiety ................................................................................................186Ustawienie innego punktu kontrolnego ...............................................................187ledzenie wsteczne ..........................................................................................188Konsola ...........................................................................................................188Dodanie prostego �ledzenia ..............................................................................188

Zarz�dzanie pami�ci� .............................................................................................189Sposób: u�ycie narz�dzia Instruments do wykrywania wycieków pami�ci ....................190Sposób: u�ycie narz�dzia Instruments do monitorowania alokacji

buforowanych obiektów ........................................................................................192Symulacja sytuacji, gdy w systemie pozosta�o niewiele wolnej pami�ci ..................193

Analiza kodu ..........................................................................................................195Od Xcode do urz�dzenia — interfejs okna Organizer ............................................196Urz�dzenia .......................................................................................................197Informacje ogólne .............................................................................................197Profile akredytacyjne .........................................................................................197Dzienniki zdarze� w urz�dzeniu ..........................................................................197Aplikacje ..........................................................................................................199Konsola ...........................................................................................................199Zrzuty ekranu ...................................................................................................199

Kompilacja dla urz�dzenia iOS ................................................................................200U�ywanie profilu akredytacyjnego programisty .....................................................200Dodanie urz�dzenia, w którym mo�na uruchamia tworzone aplikacje ...................201Przeanalizuj identyfikator aplikacji ......................................................................201Ustawienie urz�dzenia i to�samo�ci podpisywania kodu ......................................202

Page 7: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 11

Okre�lenie bazowej wersji SDK dla aplikacji ........................................................203Kompilacja i uruchomienie aplikacji Hello World ..................................................204Podpisywanie skompilowanych aplikacji ..............................................................205

Wykrywanie platformy docelowej podczas kompilacji .................................................205Sprawdzanie zgodno�ci podczas dzia�ania aplikacji ...................................................205Znaczniki pragma mark ..........................................................................................207

Ukrywanie tre�ci metod .....................................................................................208Przygotowanie do dystrybucji ...................................................................................208

Odszukanie i oczyszczenie aplikacji ....................................................................208U�ywanie schematów i akcji ..............................................................................209Dodanie w�asnej konfiguracji kompilacji aplikacji .................................................210Informacje dotycz�ce dystrybucji tymczasowej .....................................................211Tworzenie pakietu w konfiguracji tymczasowej .....................................................212

Dystrybucja tymczasowa OTA ..................................................................................213Utworzenie pliku manifestu ...............................................................................213

Zg�oszenie aplikacji do iTunes App Store .................................................................215Podsumowanie ......................................................................................................217

4 Projektowanie interfejsu u�ytkownika ...................................................... 219Klasy UIView i UIWindow .........................................................................................219

Widoki wy�wietlaj�ce dane ................................................................................220Widok przeznaczony do dokonania wyboru ..........................................................221Kontrolki ..........................................................................................................222Tabele i kontrolki typu Picker .............................................................................223Paski ...............................................................................................................223Pasek post�pu i wska�nik wykonywania operacji .................................................224

Kontroler widoku ....................................................................................................224Klasa UIViewController ......................................................................................225Klasa UINavigationController .............................................................................225Klasa UITabBarController ..................................................................................226Kontroler widoku podzielonego ..........................................................................226Kontroler widoku strony ....................................................................................227Kontroler typu Popover ......................................................................................227Kontroler widoku tabeli .....................................................................................227Kontroler ksi��ki adresowej ...............................................................................228Klasa UIImagePicker .........................................................................................228Tworzenie wiadomo�ci e-mail .............................................................................228Klasa UIDocumentInteractionController ..............................................................229Klasa GKPeerPickerController ............................................................................229Kontrolery odtwarzania tre�ci multimedialnej ......................................................229

Geometria widoku ..................................................................................................229Pasek stanu .....................................................................................................230Paski nawigacyjny, narz�dziowy i kart .................................................................231Klawiatura i kontrolki Picker ..............................................................................233Pole tekstowe ..................................................................................................233Klasa UIScreen ................................................................................................234

Tworzenie interfejsu ...............................................................................................235

Page 8: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

12 iOS 5. Podr�cznik programisty

U�ycie funkcji Storyboard do utworzenia interfejsu u�ytkownika ..................................235Utworzenie nowego projektu ..............................................................................236Dodanie kolejnych kontrolerów widoku ...............................................................236Organizacja widoków .........................................................................................237Uaktualnienie klas ............................................................................................238Nazwy scen ......................................................................................................238Edycja atrybutów widoku ...................................................................................239Dodanie przycisków nawigacyjnych .....................................................................239Dodanie kolejnego kontrolera nawigacyjnego ......................................................241Nadawanie nazw kontrolerom ............................................................................241Pokolorowanie pasków nawigacyjnych ................................................................241Dodanie przycisku ............................................................................................242Zmiana pocz�tkowo wy�wietlanego kontrolera ....................................................242Dodanie kodu usuwaj�cego widok z ekranu ........................................................242Uruchomienie aplikacji ......................................................................................243

U�ycie okien typu Popover ......................................................................................243Dodanie kontrolera nawigacyjnego .....................................................................244Zmiana klasy kontrolera widoku .........................................................................244Dostosowanie do w�asnych potrzeb widoku okna Popover ....................................245Utworzenie po��cze� .........................................................................................245Edycja kodu .....................................................................................................245

U�ycie modu�u Interface Builder do utworzenia konwertera temperatur .......................247Utworzenie nowego projektu ..............................................................................247Dodanie plików .................................................................................................247Interface Builder ...............................................................................................248Dodanie etykiet i widoków .................................................................................249W��czenie zmiany orientacji ...............................................................................249Test interfejsu ..................................................................................................249Dodanie outletów i akcji ....................................................................................249Dodanie metody konwersji ................................................................................251Uaktualnienie rodzaju klawiatury ........................................................................251Po��czenie interfejsu iPada ...............................................................................252

R�czna budowa interfejsu aplikacji konwertera .........................................................253Po��czenie wszystkiego razem ...........................................................................255

Tworzenie, wczytywanie i u�ywanie interfejsów hybrydowych ......................................256Utworzenie nowego pliku .xib przeznaczonego na interfejs u�ytkownika .................256Dodanie widoku i wype�nienie go tre�ci� .............................................................257Nadanie warto�ci tag widokom ..........................................................................257Edycja kodu .....................................................................................................257

Projektowanie w celu zapewnienia obrotu interfejsu ..................................................258W��czenie zmiany uk�adu ........................................................................................258Automatyczna zmiana wielko�ci ..............................................................................261

Przyk�ad automatycznej zmiany wielko�ci ............................................................262Omówienie opcji automatycznej zmiany wielko�ci ................................................264

Przenoszenie widoków ............................................................................................264Sposób: przenoszenie widoków poprzez na�ladowanie szablonów ..............................265I jeszcze jedno: kilka doskona�ych podpowiedzi dotycz�cych modu�u Interface Builder ....268Podsumowanie ......................................................................................................270

Page 9: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 13

5 Praca z kontrolerem widoku .................................................................... 271Praca z kontrolerem nawigacyjnym i widokiem podzielonym .......................................271

U�ywanie stosów i kontrolerów nawigacyjnych .....................................................273Umieszczanie i usuwanie kontrolera ze stosu .....................................................273Klasa elementu nawigacyjnego ..........................................................................274Kontroler modalny ............................................................................................275

Sposób: budowa prostego menu sk�adaj�cego si� z dwóch elementów ......................275Sposób: dodanie kontrolki segmentowanej ..............................................................277Sposób: nawigacja pomi�dzy kontrolerami widoków ..................................................279Sposób: wy�wietlenie w�asnego widoku modalnego zawieraj�cego informacje .............281Sposób: kontroler widoku strony .............................................................................285

W�a�ciwo�ci ksi��ki ..........................................................................................285Opakowanie implementacji ................................................................................286Omówienie kodu sposobu .................................................................................290

Sposób: przewijanie stron w kontrolerze widoku strony .............................................291Sposób: pasek kart ................................................................................................292Sposób: zapami�tanie stanu paska kart ..................................................................295Sposób: utworzenie kontrolera widoku podzielonego .................................................298Sposób: utworzenie aplikacji uniwersalnej u�ywaj�cej widoku podzielonego ................302Sposób: w�asny pojemnik i przej�cie segue ..............................................................304

Przej�cia pomi�dzy kontrolerami widoków ...........................................................308I jeszcze jedno: modu� Interface Builder i kontroler paska kart ...................................309Podsumowanie ......................................................................................................310

6 Tworzenie widoków i animacji .................................................................. 313Hierarchia widoku ..................................................................................................313Sposób: odkrywanie drzewa hierarchii widoku ..........................................................315Sposób: wykonywanie zapyta� do podwidoków .........................................................315Zarz�dzanie podwidokami .......................................................................................317

Dodanie podwidoku ..........................................................................................317Zmiana kolejno�ci i usuwanie podwidoków .........................................................318Wywo�ania zwrotne widoku ................................................................................318

Sposób: oznaczanie widoków warto�ciami tag oraz pobieranie widoków .....................319U�ywanie warto�ci tag do wyszukiwania widoków ................................................319

Sposób: nadawanie nazw widokom .........................................................................321Obiekty powi�zane ............................................................................................321U�ycie s�ownika nazw ........................................................................................323

Geometria widoku ..................................................................................................326Ramka .............................................................................................................326Przekszta�cenia ................................................................................................327Systemy wspó�rz�dnych ....................................................................................328

Sposób: praca z ramk� widoku ...............................................................................328Dostosowanie wielko�ci ....................................................................................329Struktura CGRect i punkt �rodkowy ....................................................................330Inne metody narz�dziowe ..................................................................................331

Sposób: losowe przeniesienie widoku ......................................................................334Sposób: przekszta�cenie widoku .............................................................................336Wy�wietlacz i cechy interakcji .................................................................................337

Page 10: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

14 iOS 5. Podr�cznik programisty

Animacje obiektu UIView ........................................................................................338Transakcyjne tworzenie animacji UIView .............................................................338Tworzenie animacji za pomoc� bloku ..................................................................340Animacja warunkowa ........................................................................................340

Sposób: pojawianie si� i znikanie widoku .................................................................341Sposób: zamiana widoków ......................................................................................342Sposób: obrót widoku ............................................................................................343Sposób: u�ywanie przej� Core Animation ................................................................343Sposób: efekt odbicia pojawiaj�cego si� widoku ......................................................345Sposób: animacja widoku obrazu ............................................................................346I jeszcze jedno: dodanie odbicia do widoku ..............................................................347Podsumowanie ......................................................................................................349

7 Praca z obrazami ..................................................................................... 351Wyszukiwanie i wczytywanie obrazów .......................................................................351

Odczyt danych obrazu .......................................................................................353Sposób: uzyskanie dost�pu do zdj� z albumu zdj� .................................................356

Praca z klas� UIImagePickerController ................................................................358Pobranie informacji z edycji obrazu .....................................................................360

Sposób: pobieranie obrazu z adresu URL zasobu .....................................................360Sposób: pstrykanie zdj� i ich zapis w albumie zdj� ................................................362

Wybór pomi�dzy aparatami ................................................................................365Zapis obrazów w katalogu Documents .....................................................................366Sposób: wysy�anie obrazów za pomoc� wiadomo�ci e-mail ........................................367

Utworzenie tre�ci wiadomo�ci ............................................................................368Wy�wietlenie kontrolera tworzenia wiadomo�ci ...................................................369

Automatyzacja wykonywania zdj� ...........................................................................370U�ywanie w�asnych nak�adek na podgl�dzie aparatu .................................................370Sposób: uzyskanie dost�pu do aparatu z poziomu AVFoundation ...............................371

Aparat jest wymagany .......................................................................................372Sprawdzanie dost�pno�ci i rodzaju aparatu ........................................................372Utworzenie sesji aparatu ...................................................................................373Prze��czanie pomi�dzy aparatami ......................................................................375Podgl�d dostarczany przez aparat ......................................................................375U�o�enie podgl�du z aparatu .............................................................................376EXIF .................................................................................................................376Geometria obrazu .............................................................................................377Tworzenie klasy pomocniczej do obs�ugi aparatu .................................................379

Sposób: dodanie filtru Core Image ..........................................................................379Sposób: wykrywanie twarzy za pomoc� Core Image ...................................................381Wyodr�bnianie twarzy .............................................................................................386Sposób: praca z obrazami rastrowymi ......................................................................387

Rysowanie w kontek�cie rastrowym ...................................................................388Przetwarzanie obrazu ........................................................................................390Rzeczywisto� dotycz�ca przetwarzania obrazów .................................................391

Sposób: pobieranie próbek na �ywo ........................................................................392Konwersja na HSB ............................................................................................394

Page 11: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 15

Sposób: utworzenie miniatur z obrazów ...................................................................395Wykonywanie zrzutu ekranu widoku .........................................................................397Rysowanie w plikach PDF .......................................................................................398Tworzenie nowego obrazu zupe�nie od pocz�tku .......................................................399Sposób: wy�wietlenie obrazu w przewijanym widoku .................................................400

Tworzenie przewijanej strony zawieraj�cej wiele obrazów ......................................402Podsumowanie ......................................................................................................402

8 Gesty i dotkni�cia ................................................................................... 405Dotkni�cia .............................................................................................................405

Fazy ................................................................................................................406Dotkni�cia i metody ich obs�ugi .........................................................................407Dotykane widoki ...............................................................................................407Obs�uga wielu dotkni� .....................................................................................408Procedury rozpoznawania gestów .......................................................................408

Sposób: dodanie prostej mo�liwo�ci bezpo�redniej manipulacji interfejsem ................409Sposób: dodanie procedury rozpoznawania gestu przesuni�cia ..................................410Sposób: jednoczesne u�ywanie wielu procedur rozpoznawania gestów .......................412

Usuwanie konfliktów pomi�dzy procedurami rozpoznawania gestów ......................414Sposób: ograniczenie ruchu ....................................................................................415Sposób: testowanie miejsca dotkni�cia ...................................................................417Sposób: testowanie grafiki rastrowej .......................................................................418Sposób: zapewnienie trwa�o�ci podczas bezpo�redniej manipulacji interfejsem ..........420

Przechowywanie informacji o stanie ...................................................................421Przywracanie informacji o stanie ........................................................................422

Sposób: zapewnienie trwa�o�ci poprzez archiwizacj� .................................................423Sposób: dodanie obs�ugi opcji cofnij .......................................................................425

Utworzenie mened�era opcji cofnij .....................................................................425Obs�uga operacji cofni�cia dla widoku potomnego ...............................................426Praca z paskiem nawigacyjnym ..........................................................................426Rejestracja operacji cofni�cia ............................................................................427Dodanie obs�ugi operacji cofni�cia poprzez potrz��ni�cie urz�dzeniem .................429Dodanie nazwy akcji dla operacji cofni�cia i powtórzenia (krok opcjonalny) ............430Zapewnienie obs�ugi edycji poprzez potrz��ni�cie ................................................430Wymuszenie statusu First Responder .................................................................430

Sposób: rysowanie w miejscu dotkni�cia ekranu ......................................................431Sposób: p�ynne rysowanie ......................................................................................432Sposób: wykrywanie okr�gów ..................................................................................435

Utworzenie w�asnej procedury rozpoznawania gestów ..........................................439Sposób: u�ywanie wielu dotkni� ............................................................................441Przytrzymanie �cie�ek dotkni� ...............................................................................443I jeszcze jedno: przeci�ganie z widoku przewijanego .................................................444Podsumowanie ......................................................................................................448

9 Tworzenie i u�ywanie kontrolek ................................................................ 449Klasa UIControl .....................................................................................................449

Rodzaje kontrolek .............................................................................................449Zdarzenia kontrolek ..........................................................................................450

Page 12: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

16 iOS 5. Podr�cznik programisty

Przyciski ................................................................................................................452Dodawanie przycisków w module Interface Builder ....................................................453

Grafika ............................................................................................................454��czenie przycisków z akcjami ...........................................................................455Przyciski, które nie s� przyciskami .....................................................................455

Tworzenie w�asnych przycisków w Xcode ..................................................................456Tekst przycisku wy�wietlany w wielu wierszach .........................................................458Umieszczenie w przycisku animowanych elementów .................................................459Sposób: animacja reakcji przycisku .........................................................................459Sposób: dodanie suwaka wraz z w�asn� ga�k� ..........................................................461

Dostosowanie egzemplarza UISlider do w�asnych potrzeb ....................................461Poprawa skuteczno�ci .......................................................................................465Proxy wygl�du ...................................................................................................465

Sposób: tworzenie kontrolki segmentowanej umo�liwiaj�cej odpowied�na drugie stukni�cie ............................................................................................466

Sposób: utworzenie podklasy klasy UIControl ...........................................................468Utworzenie egzemplarza UIControl .....................................................................470ledzenie dotkni� ...........................................................................................470Przekazywanie zdarze� ......................................................................................471

Praca z prze��cznikami i stepperami ........................................................................471Sposób: utworzenie suwaka z gwiazdkami ...............................................................472Sposób: budowa tarczy dotykowej ...........................................................................476Dodanie kontrolki wska�nika strony .........................................................................478Sposób: utworzenie w�asnego rozwi�zania przeznaczonego do przewijania stron .........480Utworzenie paska narz�dziowego ............................................................................484

Utworzenie paska narz�dziowego w kodzie .........................................................485Podpowiedzi dotycz�ce paska narz�dziowego w iOS 5 .........................................487

Podsumowanie ......................................................................................................487

10 Praca z tekstem ...................................................................................... 489Sposób: ukrycie klawiatury po zako�czeniu edycji tekstu w kontrolce UITextField ........489

W�a�ciwo�ci dotycz�ce cech tekstu ....................................................................491Inne w�a�ciwo�ci dotycz�ce pól tekstowych ........................................................492

Sposób: dostosowanie widoków wokó� klawiatur ......................................................493Sposób: przykrycie widoku tekstu w�asnym widokiem pomocniczym ...........................495Sposób: zmiana wielko�ci widoku po pod��czeniu klawiatury sprz�towej .....................497Sposób: utworzenie w�asnego widoku wprowadzania danych .....................................500Sposób: widoki potrafi�ce obs�u�y dane wej�ciowe w postaci tekstu ........................504Sposób: dodanie w�asnego widoku danych wej�ciowych do widoku nietekstowego ......507

Dodanie d�wi�ku klikni�cia ................................................................................509Sposób: zbudowanie lepszego edytora tekstów ........................................................509Sposób: filtrowanie tekstu ......................................................................................511Sposób: wykrywanie wzorców tekstu ........................................................................513

Tworzenie w�asnych wyra�e� ..............................................................................514Enumeracja wyra�enia regularnego .....................................................................516Wykrywanie danych ...........................................................................................516Dodanie wbudowanego detektora danych ...........................................................517

Page 13: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 17

Sposób: wykrywanie b��dów w UITextView ................................................................517Wyszukiwanie ci�gów tekstowych .......................................................................518

Sposób: wy�wietlenie dost�pnych czcionek ..............................................................519Sposób: dodanie w�asnych czcionek do aplikacji ......................................................520Sposób: podstawy pracy z Core Text i ci�gami tekstowymi z atrybutami ......................521U�ycie pseudo-HTML do utworzenia tekstu z atrybutami ............................................526Sposób: podzia� na strony w Core Text ....................................................................531Sposób: generowanie tekstu do dokumentu PDF ......................................................532Sposób: wy�wietlanie tekstu w nieregularnych kszta�tach ..........................................533Sposób: wy�wietlanie tekstu na �cie�ce ..................................................................536

Wy�wietlanie tekstu na �cie�kach Béziera ..........................................................541Wy�wietlanie proporcjonalne .............................................................................541Wy�wietlanie liter .............................................................................................542

I jeszcze jedno: du�y tekst na ekranie iPhone’a ........................................................543Podsumowanie ......................................................................................................546

11 Tworzenie widoków tabel i zarz�dzanie nimi ............................................. 547Wprowadzenie do klas UITableView i UITableViewController .......................................547

Utworzenie tabeli ..............................................................................................548Sposób: implementacja prostej tabeli ......................................................................550

Wype�nienie tabeli ............................................................................................550Metody �ród�a danych .......................................................................................551Ponowne u�ycie komórek ..................................................................................552Udzielanie odpowiedzi na dzia�ania u�ytkownika ..................................................552Kolor zaznaczonej komórki ................................................................................552Zmiana koloru t�a tabeli ....................................................................................553Typy komórek ...................................................................................................553

Sposób: utworzenie w�asnej komórki w module Interface Builder ...............................554Dodanie w�asnych atrybutów zaznaczonej komórki ...............................................556Zdefiniowanie naprzemiennych kolorów komórek .................................................556Usuni�cie efektu zaznaczenia komórki ...............................................................557Tworzenie tabel zgrupowanych ...........................................................................557

Sposób: zapami�tanie stanu kontrolki we w�asnej komórce .......................................558Wizualizacja ponownego wykorzystania komórki ..................................................560Utworzenie „wybranej” komórki tabeli .................................................................561Praca z przyciskiem typu disclosure ...................................................................562

Sposób: edycja tabeli .............................................................................................564Wy�wietlanie kontrolek usuwania komórek .........................................................567Usuni�cie z ekranu kontrolek usuwania komórek ................................................567Obs�uga ��da� usuni�cia komórek .....................................................................567Obs�uga funkcji cofni�cia operacji ......................................................................567Gest machni�cia w komórce ..............................................................................568Dodawanie komórek .........................................................................................568Zmiana kolejno�ci komórek ...............................................................................568Algorytmiczne sortowanie tabeli .........................................................................569

Sposób: praca z sekcjami .......................................................................................570Tworzenie sekcji ...............................................................................................571Zliczanie sekcji i rekordów .................................................................................572

Page 14: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

18 iOS 5. Podr�cznik programisty

Zwrot komórek .................................................................................................572Utworzenie nag�ówka sekcji ...............................................................................573Utworzenie indeksu sekcji .................................................................................573Mechanizm delegacji w sekcjach .......................................................................574

Sposób: wyszukiwanie w tabeli ...............................................................................575Utworzenie kontrolera opcji wyszukiwania ...........................................................575Utworzenie metod �ród�a danych ........................................................................576Metody delegata ...............................................................................................578U�ywanie indeksu wyszukiwania .........................................................................578Dostosowanie nag�ówka i stopki do w�asnych potrzeb .........................................579

Sposób: dodanie do tabeli opcji „poci�gnij, aby od�wie�y” .......................................581Utworzenie w kodzie w�asnej tabeli zgrupowanej .......................................................583

Utworzenie zgrupowanej tabeli ustawie� .............................................................583Sposób: utworzenie tabeli zawieraj�cej wiele tarcz ...................................................585

Utworzenie egzemplarza UIPickerView ................................................................586Sposób: u�ycie kontrolki UIPickerView z widokami ....................................................588Sposób: u�ycie egzemplarza UIDatePicker ...............................................................590

Utworzenie egzemplarza UIDatePicker ................................................................592I jeszcze jedno: formatowanie daty ..........................................................................592Podsumowanie ......................................................................................................595

12 Rozpocz�cie pracy z Core Data ................................................................ 597Wprowadzenie do Core Data ...................................................................................597

Utworzenie i edycja plików modelu .....................................................................598Generowanie plików klasy .................................................................................600Utworzenie kontekstu Core Data ........................................................................600Dodawanie obiektów .........................................................................................601Wykonywanie zapyta� do bazy danych ................................................................603Wykrywanie zmian ............................................................................................604Usuwanie obiektów ...........................................................................................604

Sposób: u�ycie Core Data jako �ród�a danych tabeli ..................................................605Sposób: wyszukiwanie w tabeli a Core Data .............................................................608Sposób: edycja danych na �ywo w widoku tabeli Core Data .......................................610Sposób: implementacja funkcji cofnij i przywró w Core Data .....................................612Podsumowanie ......................................................................................................615

13 Komunikaty ostrze�e� wy�wietlane u�ytkownikowi ................................... 617Bezpo�rednia komunikacja z u�ytkownikiem poprzez komunikaty ...............................617

Utworzenie prostego komunikatu .......................................................................617Delegat komunikatu ..........................................................................................618Wy�wietlenie komunikatu ..................................................................................620Rodzaje komunikatów .......................................................................................620

„Prosz� czeka” — wy�wietlenie u�ytkownikowi paska post�pu .................................621U�ywanie klasy UIActivityIndicatorView ................................................................621U�ywanie klasy UIProgressView ..........................................................................622

Sposób: komunikat bez przycisków .........................................................................623Utworzenie p�ywaj�cego wska�nika post�pu ........................................................625

Sposób: utworzenie komunikatu modalnego w p�tli dzia�ania ....................................625

Page 15: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Spis tre�ci 19

Sposób: u�ycie metody o zmiennej liczbie argumentów do utworzenia komunikatu ......628Wy�wietlenie prostego menu ..................................................................................629

Przewijanie menu .............................................................................................631Wy�wietlanie tekstu w egzemplarzu UIActionSheet ..............................................631

Sposób: utworzenie w�asnego widoku komunikatu ....................................................631Widok, który mo�na nacisn� ............................................................................633

Sposób: proste okno typu Popover ..........................................................................633Sposób: powiadomienia lokalne ..............................................................................635Wska�niki komunikatów .........................................................................................636

U�ywanie plakietek w aplikacji ...........................................................................636Sposób: proste komunikaty audio ...........................................................................636

D�wi�ki systemowe ...........................................................................................637Wibracja ..........................................................................................................638Komunikaty ......................................................................................................638Opó�nienia .......................................................................................................639

I jeszcze jedno: wy�wietlenie komunikatu i umo�liwienie dostosowania poziomu g�o�no�ci ..........................................................................640

Podsumowanie ......................................................................................................641

14 Mo�liwo�ci urz�dzenia ............................................................................. 643Uzyskanie dost�pu do informacji podstawowych .......................................................643Dodanie ogranicze� zwi�zanych z mo�liwo�ciami urz�dze� ........................................644Sposób: pobieranie informacji dodatkowych o urz�dzeniu ..........................................646Monitorowanie poziomu na�adowania baterii w iPhonie .............................................647W��czanie i wy��czanie czujnika zbli�eniowego ..........................................................648Sposób: u�ycie przy�pieszeniomierza w celu ustalenia „góry” urz�dzenia ...................649

Synchroniczne pobieranie bie��cego k�ta przy�pieszeniomierza ...........................651Obliczanie k�ta wzgl�dnego ...............................................................................652Praca z podstawow� orientacj� ..........................................................................652

Sposób: u�ycie przy�pieszeniomierza do poruszania obiektami po ekranie .................653Dodanie nieco blasku .......................................................................................656

Sposób: podstawy Core Motion ...............................................................................656Sprawdzanie dost�pno�ci czujników ...................................................................657Obs�uga bloku ..................................................................................................657

Sposób: pobieranie i u�ywanie informacji o po�o�eniu urz�dzenia ...............................660U�ycie zdarze� ruchu do wykrycia wstrz��ni�cia urz�dzeniem ....................................661Sposób: u�ycie przy�pieszeniomierza do wykrycia gestu wstrz��ni�cia .......................663Sposób: u�ywanie ekranów zewn�trznych .................................................................666

Wykrywanie ekranu ...........................................................................................667Pobieranie informacji o rozdzielczo�ci ekranu ......................................................667Konfiguracja wyj�cia wideo ................................................................................667Dodanie obiektu DisplayLink .............................................................................668Kompensacja overscanningu .............................................................................668VIDEOkit ..........................................................................................................668

I jeszcze jedno: sprawdzenie dost�pnej ilo�ci wolnego miejsca na dysku ....................671Podsumowanie ......................................................................................................672

Page 16: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

20 iOS 5. Podr�cznik programisty

15 Sie� ........................................................................................................ 675Sprawdzenie stanu po��czenia z sieci� ....................................................................675Sposób: rozbudowa klasy UIDevice o mo�liwo�ci

w zakresie sprawdzania dost�pno�ci .....................................................................677Skanowanie w poszukiwaniu zmian w po��czeniu ......................................................679Pobieranie IP i informacji o komputerze ...................................................................681U�ywanie kolejek, aby nie blokowa aplikacji ............................................................684Sprawdzanie dost�pno�ci witryny ............................................................................685Pobieranie synchroniczne .......................................................................................687Pobieranie asynchroniczne w teorii ..........................................................................690Sposób: pobieranie asynchroniczne ........................................................................691Obs�uga wyzwa� zwi�zanych z uwierzytelnieniem ......................................................697

Przechowywanie danych uwierzytelniaj�cych ........................................................697Sposób: przechowywanie i pobieranie danych uwierzytelniaj�cych z p�ku kluczy ..........700Sposób: przekazywanie danych do serwera ..............................................................703

NSOperationQueue ...........................................................................................706Twitter ..................................................................................................................706Sposób: konwersja XML na posta drzewa ...............................................................707

Drzewa ............................................................................................................707Utworzenie drzewa przetwarzania .......................................................................707U�ycie drzewa wyników ......................................................................................709

Sposób: utworzenie prostego serwera opartego na sieci ...........................................711I jeszcze jedno: u�ycie serializacji JSON ...................................................................714Podsumowanie ......................................................................................................715

Skorowidz .............................................................................................. 717

Page 17: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

14Możliwości urządzenia

ażde urządzenie iPhone to mieszanka unikatowych, współdzielonych, tymczasowych i trwałych cech.Wspomniane cechy to między innymi aktualna fizyczna orientacja urządzenia, nazwa modelu, stan

baterii oraz dostęp do komponentów sprzętowych. W tym rozdziale skoncentrujemy się na urządzeniu,począwszy od konfiguracji kompilacji, aż po aktywne czujniki sprzętowe. Przedstawię przykłady dostarczająceróżnych informacji na temat urządzenia, w którym została uruchomiona aplikacja. Dowiesz się, jak w trakciedziałania aplikacji przetestować sprzęt pod kątem wymaganych cech, a następnie opisać te cechy w plikuInfo.plist. Poznasz sposoby pobierania informacji z czujników i nasłuchiwania powiadomień, dzięki którymmożna wywoływać metody po wykryciu zmian w stanie czujników. W rozdziale koncentruję się na sprzęcie,systemie plików i czujnikach dostępnych w iPhone’ie. Ponadto pomogę Ci w programowym wykorzystaniumożliwości oferowanych przez iPhone’a.

Uzyskanie dost�pu do informacji podstawowychKlasa UIDevice udostępnia klucze właściwości charakterystycznych dla urządzeń (np. dla iPhone’a i iPodatouch) pozwalające na sprawdzenie między innymi nazwy urządzenia, nazwy i wersji używanego systemuoperacyjnego itd. Wymieniona klasa to proste rozwiązanie, które pozwala na szybkie pobranie pewnychinformacji dotyczących systemu. Każda metoda jest metodą egzemplarza wywoływaną jako Singleton, np.[UIDevice currentDevice].

Poniżej wymieniono kilka właściwości klasy UIDevice pozwalających na pobranie pewnych informacjio urządzeniu.

� systemName — przechowuje nazwę aktualnie używanego systemu operacyjnego. W przypadkubieżącej generacji urządzeń iOS istnieje tylko jedna wersja systemu działającego na platformie:iPhone OS. Firma Apple nie uaktualniła jeszcze nazwy systemu, aby ogólnie odnosiła się dourządzeń iOS.

� systemVersion — podaje wersję oprogramowania firmware aktualnie zainstalowanego w urządzeniu,np. 4.2, 4.3, 5.0 itd.

� model — zawiera ciąg tekstowy opisujący platformę, np. iPhone, iPad lub iPod touch. Jeżeli rodzinaurządzeń iOS zostanie powiększona, pojawią się dodatkowe ciągi tekstowe opisujące nowe urządzenia.Właściwość localizedModel to zlokalizowana wersja wymienionej właściwości.

K

Page 18: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

644 Rozdzia� 14. Mo�liwo�ci urz�dzenia

� userInterfaceIdiom — określa styl interfejsu używanego w bieżącym urządzeniu, czyli iPhone(dla urządzeń iPhone i iPod touch) lub iPad. Mogą pojawić się jeszcze inne style, jeżeli firma Applewprowadzi kolejne urządzenia iOS.

� name — zawiera ciąg tekstowy opisujący nazwę przypisaną urządzeniu w aplikacji iTunes przezużytkownika, np. iPhone Janka lub Mój telefon. Ta nazwa jest wykorzystywana także do utworzenianazwy lokalnej dla urządzenia.

Poniżej przedstawiono kilka przykładów użycia wymienionych właściwości:

UIDevice *device = [UIDevice currentDevice];NSLog(@"Nazwa systemu: %@", device.systemName);NSLog(@"Model: %@", device.model);NSLog(@"Nazwa urz�dzenia: %@", device.name);

W przypadku bieżących wydań systemu iOS masz możliwość sprawdzenia typu urządzenia dziękiprostemu testowi zwracającego wartość boolowską:

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

Można przyjąć założenie, że powyższy test zwróci wartość NO, gdy aktualnym urządzeniem nie będzieiPad (czyli w przypadku urządzeń iPhone i iPod touch). Jeśli firma Apple wypuści na rynek nową rodzinęurządzeń, wtedy będziesz musiał odpowiednio uaktualnić kod. Oto przykład rozwiązania:

if (IS_IPAD){ // Kod przeznaczony dla iPada.}else if (IS_IPHONE){ // Kod przeznaczony dla urz�dze iPhone i iPod touch.}else if (IS_OTHER_DEVICE){ // Kod przeznaczony dla innych urz�dze iOS.}

Dodanie ogranicze� zwi�zanych z mo�liwo�ciami urz�dze�Plik Info.plist pozwala na określenie wymagań aplikacji podczas jej umieszczania w iTunes. Zdefiniowaneograniczenia informują iTunes, jakie funkcje są wymagane przez daną aplikację.

Każde urządzenie iOS jest wyposażone w pewien zestaw funkcji. Niektóre posiadają wbudowane aparatyi GPS, natomiast inne są ich pozbawione. Jeszcze inne mają żyroskop, autofocus itd. Masz więc możliwośćzdefiniowania funkcji wymaganych do działania Twojej aplikacji.

Umieszczając klucz UIRequiredDeviceCapabilities w pliku Info.plist, powodujesz, że iTunes ograniczamożliwość instalacji Twojej aplikacji jedynie do urządzeń wyposażonych w zdefiniowane funkcje. Listęfunkcji podajesz jako tablicę ciągów tekstowych lub w postaci słownika.

Tablica zawiera każdą wymaganą funkcję, a wszystkie elementy tablicy (funkcje) muszą być dostępnew urządzeniu. Z kolei słownik pozwala na wyraźne zdefiniowanie funkcji jako wymaganej lub niedozwolonejw danym urządzeniu. Klucze słownika oznaczają możliwości, natomiast wartości określają, czy funkcja musibyć obecna (boolowska wartość YES), czy nie (NO).

Page 19: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Dodanie ogranicze� zwi�zanych z mo�liwo�ciami urz�dze� 645

Aktualnie dostępne klucze słownika zostały wymienione w tabeli 14.1. Używaj tylko tych funkcji, które sąabsolutnie wymagane przez aplikację lub nie mogą być w żaden sposób obsłużone. Jeżeli w aplikacji możeszumieścić pewne rozwiązanie pozwalające na obejście braku pewnej funkcji w urządzeniu, to nie definiuj tejfunkcji za pomocą klucza słownika. Wszystkie funkcje wymienione w tabeli 14.1 zostały przedstawionew pozytywnym kontekście. Kiedy stosujesz wykluczenia zamiast wymogu dostępności danej funkcji, wtedyzastosuj jej negatywne znaczenie. Przykładowo zdefiniuj, że urządzenie nie może posiadać autofocusa lubżyroskopu bądź że dostęp do serwisu Game Center jest nieobsługiwany.

Tabela 14.1. Mo�liwo�ci oferowane przez urz�dzenie

Klucz Sposób u�ycia

telephony Aplikacja wymaga programu Telefon lub u�ywa schematu URL tel://.

wifi Aplikacja wymaga dost�pu do sieci lokalnej 802.11.

sms Aplikacja wymaga programu Wiadomo�ci lub u�ywa schematu URL sms://.

still-camera Aplikacja wymaga obecno�ci aparatu w urz�dzeniu i mo�e u�ywa interfejsu kontrolkiUIImagePicker do wykonywania zdj� tym aparatem.

auto-focus-camera Aplikacja wymaga dodatkowego osprz�tu (autofocus) w celu wykonywania zdj� makrolub wyj�tkowo ostrych zdj� na potrzeby wykrywania danych na zdj�ciach.

opengles-1 Aplikacja wymaga obs�ugi OpenGL ES 1.1.

opengles-2 Aplikacja wymaga obs�ugi OpenGL ES 2.0.

camera-flash Aplikacja wymaga dost�pno�ci flesza w aparacie.

video-camera Aplikacja wymaga aparatu, który ma mo�liwo� nagrywania filmów.

accelerometer Aplikacja wymaga obecno�ci przy�pieszeniomierza, który pozwala na znacznie wi�cejni� prost� zmian� orientacji UIViewController.

gyroscope Aplikacja wymaga obecno�ci �yroskopu w urz�dzeniu.

location-services Aplikacja wymaga u�ycia technologii Core Location.

gps Aplikacja u�ywa Core Location i wymaga dodatkowej dok�adno�ci podczas okre�laniapo�o�enia urz�dzenia za pomoc� GPS.

magnetometer Aplikacja u�ywa Core Location i wymaga zdarze� zwi�zanych z poruszaniem si�— to znaczy kierunku podró�y. (Ten czujnik jest wbudowany w kompasie).

gamekit Aplikacja wymaga dost�pu do serwisu Game Center (system iOS 4.1 i nowsze).

microphone Aplikacja u�ywa mikrofonu wbudowanego lub (obs�ugiwanego) osprz�tu oferuj�cegomikrofon.

armv6 Aplikacja jest skompilowana jedynie dla zbioru instrukcji armv6 (iOS 3.1 i nowsze).

armv7 Aplikacja jest skompilowana jedynie dla zbioru instrukcji armv7 (iOS 3.1 i nowsze).

peer-peer Aplikacja u�ywa po��cze� Bluetooth typu jeden do jednego w serwisie Game Center(iOS 3.1 i nowsze).

Przeanalizujmy przykład aplikacji oferującej możliwość wykonywania zdjęć, jeśli urządzenie jestwyposażone w aparat. Jeżeli taka aplikacja działa w urządzeniach niewyposażonych w aparat, np. wcześniejszychwersjach iPoda touch, nie umieszczaj w słowniku wymagania dostępności aparatu. Zamiast tego dostępnośćaparatu sprawdź z poziomu kodu w aplikacji i wyświetlaj interfejs aparatu, gdy taki znajduje się w urządzeniu.Dodanie klucza w słowniku spowoduje wyeliminowanie potencjalnych klientów, którzy posiadają urządzeniabez aparatu — wczesne wersje urządzenia iPod touch (od pierwszej do trzeciej generacji) oraz iPada pierwszejgeneracji.

Page 20: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

646 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Sposób: pobieranie informacji dodatkowych o urz�dzeniuFunkcje sysctl() i sysctlbyname() pozwalają na pobieranie informacji dotyczących systemu. To sąstandardowe funkcje platformy UNIX pozwalające na wykonywanie zapytań do systemu operacyjnego w celupobrania informacji szczegółowych dotyczących sprzętu i systemu. Jeśli zajrzysz do pliku /usr/include/sys/sysctl.hw komputerze Mac, to poznasz ogólny zasięg działania wymienionych funkcji. We wspomnianym plikuznajdziesz obszerną listę stałych, które można wykorzystać w charakterze parametrów wymienionychwcześniej funkcji.

Wspomniane stałe pozwalają na pobranie pewnych informacji, np. częstotliwości taktowania procesora,ilości dostępnej pamięci itd. W sposobie 14.1 zademonstrowałam pobranie tego typu informacji. Kod zawierakategorię UIDevice odpowiedzialną za zbieranie informacji o urządzeniu, a następnie ich przekazywaniepoprzez serię wywołań metod.

Sposób 14.1. Rozszerzone zbieranie informacji o urz�dzeniu

@implementation UIDevice (Hardware)+ (NSString *) getSysInfoByName:(char *)typeSpecifier{ // Pobranie informacji dostarczanych przez funkcj� sysctl(). size_t size; sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);

char *answer = malloc(size); sysctlbyname(typeSpecifier, answer, &size, NULL, 0);

NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding]; free(answer);

return results;}

- (NSString *) platform{ return [UIDevice getSysInfoByName:"hw.machine"];}

- (NSUInteger) getSysInfo: (uint) typeSpecifier{ size_t size = sizeof(int); int results; int mib[2] = {CTL_HW, typeSpecifier}; sysctl(mib, 2, &results, &size, NULL, 0); return (NSUInteger) results;}

- (NSUInteger) cpuFrequency{ return [UIDevice getSysInfo:HW_CPU_FREQ];}

- (NSUInteger) busFrequency{ return [UIDevice getSysInfo:HW_BUS_FREQ];}

Page 21: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Monitorowanie poziomu na�adowania baterii w iPhone’ie 647

- (NSUInteger) totalMemory{ return [UIDevice getSysInfo:HW_PHYSMEM];}

- (NSUInteger) userMemory{ return [UIDevice getSysInfo:HW_USERMEM];}

- (NSUInteger) maxSocketBufferSize{ return [UIDevice getSysInfo:KIPC_MAXSOCKBUF];}@end

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Być może zastanawiasz się, dlaczego przedstawiona kategoria zawiera metodę platform, skoro standardowaklasa UIDevice na żądanie zwraca nazwę modelu urządzenia. Odpowiedź kryje się w możliwości rozróżnianiaróżnych typów urządzeń.

Standardowo iPhone 3GS jest określany po prostu jako iPhone, podobnie jak iPhone 4. Z kolei przedstawionakategoria podaje iPhone2,1 dla modelu 3GS i iPhone3,1 dla modelu iPhone 4. W ten sposób masz możliwośćprogramowego odróżnienia pierwszej generacji iPhone’a (iPhone1,1) od iPhone’a 3G (iPhone1,2).

Każdy z wymienionych modeli oferuje różne wbudowane funkcje. Poznanie numeru modelu urządzenia,w którym została uruchomiona aplikacja, pozwala na określenie, czy dane urządzenie będzie potrafiło obsłużyćkonkretną funkcję, np. GPS lub kompas.

Monitorowanie poziomu na�adowania baterii w iPhone’ieMasz możliwość programowego śledzenia poziomu naładowania baterii w iPhone’ie i jej aktualnego stanu.Poziom naładowania baterii jest przedstawiany za pomocą wartości zmiennoprzecinkowej z zakresu od 0.0(w pełni rozładowana) do 1.0 (w pełni naładowana). Wartość ta przedstawia przybliżony poziom naładowaniabaterii, możesz ją wykorzystać przed rozpoczęciem operacji, której przeprowadzenie wymaga wyjątkowodużej ilości energii.

Na przykład przed przeprowadzeniem serii długotrwałych obliczeń matematycznych możesz o tymostrzec użytkownika i zaproponować podłączenie urządzenia do gniazdka sieciowego. Poziom naładowaniabaterii sprawdzasz poprzez wywołanie klasy UIDevice. Wartość zwrotna jest podawana w odstępach co 5%.

NSLog(@"Poziom na�adowania baterii: %0.2f%", [[UIDevice currentDevice] batteryLevel] * 100);

Stan baterii ma cztery możliwe wartości. Urządzenie może być ładowane (to znaczy podłączone do źródłaprądu), w pełni naładowane, odłączone od źródła prądu lub w stanie nieznanym. Stan baterii można odczytaćdzięki właściwości batteryState klasy UIDevice:

Page 22: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

648 Rozdzia� 14. Mo�liwo�ci urz�dzenia

NSArray *stateArray = [NSArray arrayWithObjects: @"Stan baterii jest nieznany", @"Urz�dzenie nie jest pod��czone do �ród�a zasilania", @"Bateria jest �adowana", @"Bateria jest w pe�ni na�adowana", nil];

UIDevice *device = [UIDevice currentDevice];NSLog(@"tan baterii: %@", [stateArray objectAtIndex:device.batteryState]);

Wymienione stany nie mogą być traktowane jako trwałe, a jedynie jako chwilowe, opisujące to, coaktualnie dzieje się z urządzeniem. To nie są opcje i nie są ze sobą łączone w celu przygotowania ogólnychinformacji o baterii. Wymienione wartości odzwierciedlają ostatnią zmianę, która dotyczy stanu baterii.

Bardzo łatwo możesz monitorować zmiany stanu baterii poprzez udzielanie odpowiedzi na powiadomieniainformujące o zmianie stanu baterii. W ten sposób wychwytujesz chwilowe zdarzenia, takie jak naładowaniebaterii, podłączenie urządzenia do źródła zasilania w celu naładowania baterii oraz odłączenie urządzenia odźródła zasilania.

Aby rozpocząć monitorowanie właściwości batteryMonitoringEnabled, przypisz wartość YES. Podczasmonitorowania klasa UIDevice generuje powiadomienia po każdym wystąpieniu zmiany w stanie baterii lubpoziomie jej naładowania. Przedstawiona poniżej metoda nasłuchuje obu powiadomień. Zwróć uwagę, żewartości możesz sprawdzać także bezpośrednio bez konieczności oczekiwania na powiadomienie. FirmaApple nie daje żadnej gwarancji dotyczącej częstotliwości generowania uaktualnień informujących o zmianiepoziomu naładowania. Jednak na podstawie przedstawionego fragmentu kodu przekonasz się, że tego rodzajupowiadomienia są generowane całkiem regularnie.

- (void) viewDidLoad{ // W��czenie monitorowania baterii. [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

// Dodanie obserwatorów stanu baterii i poziomu jej na�adowania. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkBattery) name:UIDeviceBatteryStateDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkBattery) name:UIDeviceBatteryLevelDidChangeNotification object:nil];}

W��czanie i wy��czanie czujnika zbli�eniowegoObecnie czujnik zbliżeniowy jest komponentem dostępnym jedynie w iPhone’ie, urządzenia iPod touch i iPadnie oferują tego czujnika. O ile nie masz ważnego powodu trzymania smartfona iPhone blisko ciała (lub naodwrót), włączenie czujnika zbliżeniowego niewiele daje.

Po włączeniu czujnika zbliżeniowego ma on jedno podstawowe zadanie — wykrycie dużego obiektuznajdującego się przed urządzeniem. Po wykryciu obiektu następuje wyłączenie ekranu i wygenerowaniepowiadomienia. Odsunięcie obiektu od urządzenia powoduje włączenie ekranu z powrotem. W ten sposóbunikasz przypadkowego naciśnięcia przycisków lub wybrania numeru uchem, kiedy prowadzisz rozmowętelefoniczną. Niektóre kiepsko zaprojektowane ochrony na urządzenie uniemożliwiają poprawne działanieczujnika zbliżeniowego.

Page 23: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza w celu ustalenia „góry” urz�dzenia 649

Aplikacja Google Mobile dostępna w sklepie iTunes App Store wykorzystuje czujnik zbliżeniowy dorozpoczęcia sesji nagrywania. Kiedy umieścisz telefon blisko głowy, aplikacja rozpocznie nagrywanie Twojegopolecenia, a następnie zinterpretuje je po odsunięciu urządzenia od głowy. Programiści aplikacji nie przejęlisię wyłączeniem ekranu, ponieważ do poprawnego nagrywania informacji nie jest wymagany graficznyinterfejs użytkownika.

Przedstawiona poniżej metoda demonstruje sposób pracy z czujnikiem zbliżeniowym dostępnymw iPhone’ie. Kod wykorzystuje klasę UIDevice w celu włączenia czujnika zbliżeniowego i nasłuchujepowiadomień UIDeviceProximityStateDidChangeNotification w celu przechwycenia informacji o zmianiestanu czujnika. Dwa dostępne stany to czujnik włączony lub wyłączony. Kiedy właściwość proximityStateklasy UIDevice zwraca wartość YES, oznacza to aktywację czujnika zbliżeniowego.

- (void) toggle: (id) sender{ UIDevice *device = [UIDevice currentDevice];

// Okre�lenie, czy czujnik zbli�eniowy jest aktualnie monitorowany, i jego ewentualne w��czenie. BOOL isEnabled = device.proximityMonitoringEnabled; device.proximityMonitoringEnabled = ! isEnabled;}

- (void) stateChange: (NSNotificationCenter *) notification{ // Zapis informacji powiadomienia. NSLog(@"Czujnik zbli�eniowy %@", [UIDevice currentDevice].proximityState ? @"spowoduje wy��czenie ekranu" : @"spowoduje z powrotem w��czenie ekranu");}

- (void) viewDidLoad{ // Dodanie obserwatora czujnika zbli�eniowego. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stateChange) name:@"UIDeviceProximityStateDidChangeNotification" object:nil];}

Sposób: u�ycie przy�pieszeniomierzaw celu ustalenia „góry” urz�dzeniaiPhone zawiera trzy czujniki pozwalające na pomiar przyśpieszenia urządzenia względem trzech osi:lewo/prawo (x), góra/dół (y) i do przodu/do tyłu (z). Wymienione wartości wskazują na siły działające naiPhone, zarówno grawitację, jak i ruch urządzeniem przez użytkownika. Możesz otrzymać ciekawe wartościopisujące wspomniane siły podczas obracania iPhone’em wokół głowy (siła dośrodkowa) lub rzucaniaiPhone’a z wysokiego budynku (spadanie swobodne). Niestety, nie będziesz w stanie odczytać tych wartości,gdy z iPhone’a pozostanie jedynie sterta złomu.

Aby obiekt otrzymywał informacje z przyśpieszeniomierza, należy zdefiniować go jako delegata.Obiekt ustawiony jako delegat musi implementować protokół UIAccelerometerDelegate:

[[UIAccelerometer sharedAccelerometer] setDelegate:self];

Page 24: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

650 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Po przypisaniu w obiekcie delegata wywoływana jest metoda accelerometer:didAccelerate:, w którejmożesz udzielić odpowiedzi na dane otrzymane z przyśpieszeniomierza. Struktura UIAcceleration przekazujemetodzie delegata trzy wartości zmiennoprzecinkowe dla osi x, y i z. Każda wartość mieści się w zakresie od-1.0 do 1.0.

float x = acceleration.x;float y = acceleration.y;float z = acceleration.z;

W sposobie 14.2 wspomniane wartości pomagają w określeniu „góry” urządzenia. Kod oblicza arcus tangenspomiędzy wektorami przyśpieszenia X i Y i zwraca kąt. Po otrzymaniu nowych danych z przyśpieszeniomierzakod obraca egzemplarz UIImageView zawierający obraz strzałki (zobacz rysunek 14.1) w taki sposób, abywskazać odpowiedni kierunek. Udzielana użytkownikowi odpowiedź w czasie rzeczywistym gwarantuje,że strzałka zawsze będzie wskazywała górę, niezależnie od sposobu umieszczenia urządzenia przez użytkownika.

Rysunek 14.1. Odrobina matematyki pozwala na wskazanie kierunku „góra” dziki u�yciu funkcji arcus tangenswzgldem si� dzia�aj�cych na osie x i y. W omawianym przyk�adzie strza�ka zawsze wskazuje gór niezale�nie

od sposobu, w jaki u�ytkownik umie�ci urz�dzenie

Sposób 14.2. Przechwytywanie zdarze� przy�pieszeniomierza

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ // Okre�lenie kierunku góra na podstawie warto�ci przy�pieszeniomierza dla osi x i y. float xx = -acceleration.x; float yy = acceleration.y; float angle = atan2(yy, xx); [arrow setTransform:CGAffineTransformMakeRotation(angle)];}

Page 25: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza w celu ustalenia „góry” urz�dzenia 651

- (void) viewDidLoad{ // Inicjalizacja delegata w celu rozpocz�cia przechwytywania zdarze przy�pieszeniomierza. [UIAccelerometer sharedAccelerometer].delegate = self;}

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Synchroniczne pobieranie bie��cego k�ta przy�pieszeniomierzaCzasami możesz chcieć pobrać dane z przyśpieszeniomierza bez konieczności definiowania delegata.Przedstawione poniżej metody przeznaczone do używania w ramach kategorii UIDevice pozwalają nasynchroniczne pobieranie bieżącego kąta urządzenia względem płaszczyzn x i y — płaszczyzny przoduurządzenia iOS. Rozwiązanie polega na przygotowaniu nowej pętli działania, zaczekaniu na zdarzenieprzyśpieszeniomierza, pobraniu kąta z wywołania zwrotnego, a następnie opuszczeniu pętli działaniai zwróceniu pobranego kąta.

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ float xx = acceleration.x; float yy = -acceleration.y; device_angle = M_PI / 2.0f - atan2(yy, xx);

if (device_angle > M_PI) { device_angle -= 2 * M_PI; }

CFRunLoopStop(CFRunLoopGetCurrent());}

- (float) orientationAngle{ // Zdefiniowanie bie��cego delegata. id priorDelegate = [UIAccelerometer sharedAccelerometer].delegate; [UIAccelerometer sharedAccelerometer].delegate = self;

// Oczekiwanie na odczyt warto�ci. CFRunLoopRun();

// Przywrócenie delegata. [UIAccelerometer sharedAccelerometer].delegate = priorDelegate;

return device_angle;}

To podejście nie jest odpowiednie, jeśli chodzi o ciągłe otrzymywanie wartości przyśpieszeniomierza— do tego należy bezpośrednio wykorzystać wywołania zwrotne. Jednak doskonale nadaje się do okazjonalnegosprawdzania wartości kąta. Przedstawione powyżej metody zapewniają prosty i bezpośredni dostęp do bieżącejwartości kąta, pod jakim znajduje się urządzenie.

Page 26: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

652 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Obliczanie k�ta wzgl�dnegoObsługa zmiany orientacji ekranu oznacza, że związki w interfejsie dla danego kąta, pod jakim znajduje sięurządzenie, muszą być obsługiwane we wszystkich ćwiartkach, po jednej dla każdej dostępnej orientacjiekranu. Podobnie jak wtedy, gdy UIViewController automatycznie obraca widok na ekranie, tak samo tutajkonieczne są pewne obliczenia matematyczne w celu uwzględnienia zmiany orientacji.

Przedstawiona poniżej metoda przeznaczona dla kategorii UIDevice oblicza kąt, pod jakim znajduje sięurządzenie, dzięki czemu ten kąt pozostaje w zgodzie z orientacją urządzenia. W ten sposób otrzymujeszwartość przesunięcia od pionu, która odpowiada aktualnemu sposobowi wyświetlania graficznego interfejsuużytkownika.

- (float) orientationAngleRelativeToOrientation:(UIDeviceOrientation) someOrientation{ float dOrientation = 0.0f; switch (someOrientation) { case UIDeviceOrientationPortraitUpsideDown: {dOrientation = M_PI; break;} case UIDeviceOrientationLandscapeLeft: {dOrientation = -(M_PI/2.0f); break;} case UIDeviceOrientationLandscapeRight: {dOrientation = (M_PI/2.0f); break;} default: break; }

float adjustedAngle = fmod(self.orientationAngle - dOrientation, 2.0f * M_PI); if (adjustedAngle > (M_PI + 0.01f)) { adjustedAngle = (adjustedAngle - 2.0f * M_PI); } return adjustedAngle;}

Powyższa metoda używa reszty z dzielenia w postaci liczby zmiennoprzecinkowej, aby obliczyć różnicępomiędzy aktualnym kątem urządzenia i przesunięciem kątowym interfejsu. W ten sposób zostanie obliczonabardzo ważna wartość przesunięcia kątowego względem pionu.

Praca z podstawow� orientacj�Klasa UIDevice używa wbudowanej właściwości orientation w celu pobrania fizycznej orientacji urządzenia.Urządzenie iOS obsługuje siedem możliwych wartości dla wymienionej właściwości:

� UIDeviceOrientationUnknown — orientacja jest aktualnie nieznana;� UIDeviceOrientationPortrait — przycisk Początek znajduje się na dole;� UIDeviceOrientationPortraitUpsideDown — przycisk Początek znajduje się na górze;

� UIDeviceOrientationLandscapeLeft — przycisk Początek znajduje się po prawej stronie;� UIDeviceOrientationLandscapeRight — przycisk Początek znajduje się po lewej stronie;

� UIDeviceOrientationFaceUp — ekran znajduje się na górze;� UIDeviceOrientationFaceDown — ekran znajduje się na dole.

Page 27: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza do poruszania obiektami po ekranie 653

Podczas typowej sesji aplikacji urządzenie może przejść przez dowolne lub wszystkie wymienioneorientacje. Choć orientacja jest ustalana w połączeniu z przyśpieszeniomierzem, to w żaden sposób nie jestpowiązana z wbudowaną wartością kątową.

System iOS oferuje dwa wbudowane makra pomagające w określeniu, czy orientacja urządzenia jestpionowa, czy pozioma: UIDeviceOrientationIsPortrait() i UIDeviceOrientationIsLandscape(). Uznałamza wygodne rozbudowę klasy UIDevice o możliwość sprawdzania orientacji na podstawie właściwościwbudowanych w urządzenie.

@property (nonatomic, readonly) BOOL isLandscape;@property (nonatomic, readonly) BOOL isPortrait;

- (BOOL) isLandscape{

return UIDeviceOrientationIsLandscape(self.orientation);}- (BOOL) isPortrait{ return UIDeviceOrientationIsPortrait(self.orientation);}

Twój kod może bezpośrednio nasłuchiwać powiadomień o zmianie orientacji urządzenia. W tym celu dowzorca Singleton, jakim jest currentDevice, należy wysłać wiadomość beginGeneratingDeviceOrientation�Notifications. Następnie trzeba dodać obserwatora w celu przechwytywania powiadomień UIDevice�OrientationDidChangeNotification. Jak możesz oczekiwać, zakończenie nasłuchiwania następuje powywołaniu endGeneratingDeviceOrientationNotification.

WskazówkaW trakcie pisania tej ksi��ki system iOS niepoprawnie zg�asza� orientacj� po pierwszym uruchomieniuaplikacji. Uaktualnienie orientacji nast�puje jedynie po zmianie po�o�enia urz�dzenia lub wywo�aniumetody UIViewController. Aplikacja uruchomiona w orientacji pionowej mo�e nie by tak traktowanaa� do chwili, gdy u�ytkownik obróci urz�dzeniem, a nast�pnie ponownie obróci je do w�a�ciwej orientacji.Ten b��d wyst�puje zarówno w symulatorze, jak i w rzeczywistym urz�dzeniu, a ponadto �atwo goodtworzy. Rozwi�zaniem mo�e by u�ycie orientacji k�towej przedstawionej w jednym z przyk�adówzaprezentowanych w rozdziale.

Sposób: u�ycie przy�pieszeniomierzado poruszania obiektami po ekraniePo zastosowaniu odrobiny kodu przyśpieszeniomierz iPhone’a można wykorzystać do poruszania obiektamina ekranie, odpowiadając w czasie rzeczywistym na poruszanie urządzeniem przez użytkownika. W sposobie14.3 przedstawiłam animowanego motyla, którym użytkownik może poruszać po ekranie.

Sposób 14.3. Poruszanie obiektami na ekranie na podstawie informacji z przy�pieszeniomierza

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ // Wyodr�bnienie komponentów przy�pieszeniomierza. float xx = -acceleration.x;

Page 28: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

654 Rozdzia� 14. Mo�liwo�ci urz�dzenia

float yy = acceleration.y;

// Przechowywanie ostatniej warto�ci k�ta. mostRecentAngle = atan2(yy, xx);

// Czy nast�pi�a zmiana kierunku? float accelDirX = SIGN(xvelocity) * -1.0f; float newDirX = SIGN(xx); float accelDirY = SIGN(yvelocity) * -1.0f; float newDirY = SIGN(yy);

// Przy�pieszenie. Aby zwi�kszy� „lepko��", nale�y zmniejszy� dodawan� warto��. if (accelDirX == newDirX) { xaccel = (abs(xaccel) + 0.85f) * SIGN(xaccel); } if (accelDirY == newDirY) { yaccel = (abs(yaccel) + 0.85f) * SIGN(yaccel); }

// Wprowadzenie zmiany przy�pieszenia wzgl�dem bie��cej pr�dko�ci. xvelocity = -xaccel * xx; yvelocity = -yaccel * yy;}

- (void) tick{ // Wyzerowanie transformacji przed zmian� po�o�enia. butterfly.transform = CGAffineTransformIdentity;

// Przesuni�cie motyla zgodnie z bie��cym wektorem pr�dko�ci. CGRect rect = CGRectOffset(butterfly.frame, xvelocity, 0.0f); if (CGRectContainsRect(self.view.bounds, rect)) { butterfly.frame = rect; }

rect = CGRectOffset(butterfly.frame, 0.0f, yvelocity); if (CGRectContainsRect(self.view.bounds, rect)) { butterfly.frame = rect; }

// Obrót motyla niezale�nie od po�o�enia. butterfly.transform = CGAffineTransformMakeRotation(mostRecentAngle + M_PI_2);}

- (void) initButterfly{ CGSize size;

// Wczytanie klatek animacji. NSMutableArray *butterflies = [NSMutableArray array]; for (int i = 1; i <= 17; i++) { NSString *fileName = [NSString stringWithFormat:@"bf_%d.png", i]; UIImage *image = [UIImage imageNamed:fileName]; size = image.size; [butterflies addObject:image]; }

Page 29: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza do poruszania obiektami po ekranie 655

// Rozpocz�cie animacji. butterfly = [[UIImageView alloc] initWithFrame:(CGRect){.size=size}]; [butterfly setAnimationImages:butterflies]; butterfly.animationDuration = 0.75f; [butterfly startAnimating];

// Okre�lenie pocz�tkowej pr�dko�ci i przy�pieszenia motyla. xaccel = 2.0f; yaccel = 2.0f; xvelocity = 0.0f; yvelocity = 0.0f;

// Dodanie motyla. butterfly.center = RECTCENTER(self.view.bounds); [self.view addSubview:butterfly];

// Aktywacja przy�pieszeniomierza. [[UIAccelerometer sharedAccelerometer] setDelegate:self];

// Uruchomienie licznika czasu. [NSTimer scheduledTimerWithTimeInterval: 0.03f target: self selector: @selector(tick) userInfo: nil repeats: YES];}

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Sekret rozwiązania kryje się w zastosowaniu licznika czasu. Zamiast bezpośrednio odpowiadać nazmiany w przyśpieszeniomierzu jak w przypadku kodu przedstawionego w sposobie 14.2, w omawianymprzykładzie wywołania zwrotne przyśpieszeniomierza dokonują pomiaru aktualnej siły. Następnie procedurastosuje te siły względem motyla, zmieniając jego ramkę. Poniżej wymieniłam kilka punktów, na które wartozwrócić uwagę.

� Kiedy kierunek siły pozostaje taki sam, motyl przyśpiesza. Wzrost prędkości jest skalowany względemstopnia siły przyśpieszenia w kierunku X lub Y.

� Metoda tick wywoływana przez licznik czasu powoduje przesunięcie motyla poprzez dodanie wektoraprędkości do punktu początkowego motyla.

� Zakres ruchu motyla jest ograniczony i po dotarciu do krawędzi ekranu motyl przestaje się poruszaćw danym kierunku. W ten sposób motyl cały czas pozostaje widoczny na ekranie. Metoda ticksprawdza, czy motyl dotarł do krawędzi ekranu. Na przykład jeśli motyl dotarł do krawędzi pionowej,to nadal może poruszać się poziomo.

� Motyl zmienia orientację i zawsze jest skierowany w dół. Odbywa się to poprzez zastosowaniepolecenia obrotu w metodzie tick. Zachowaj ostrożność podczas używania transformacji względemramki lub przesunięcia punktu środkowego. Przed zastosowaniem przesunięcia zawsze zeruj wartości,a następnie ponownie stosuj wszelkie zmiany kąta. W przeciwnym razie mogą wystąpić niepożądanezjawiska, np. powiększenie, zmniejszenie lub zdeformowanie ramki.

Page 30: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

656 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Dodanie nieco blaskuWprawdzie zastosowana w kodzie sposobu 14.3 animacja motyla przyciąga oko, ale efekt można jeszczepoprawić poprzez zastosowanie w warstwie motyla emitera Core Animation. Emiter generuje cząsteczkiw czasie rzeczywistym, używając do tego zestawu własnych właściwości. Przedstawiony poniżej fragmentkodu powoduje utworzenie cząsteczek przypominających pewnego rodzaju chmurę kurzu poruszającą sięwraz z motylem, powstałą jakby na skutek ruchu skrzydeł motyla.

// Dodanie emitera cz�steczek.float multiplier = 0.25f;

CAEmitterLayer *emitter = [CAEmitterLayer layer];emitter.emitterPosition = RECTCENTER(butterfly.bounds);emitter.emitterMode = kCAEmitterLayerOutline;emitter.emitterShape = kCAEmitterLayerCircle;emitter.renderMode = kCAEmitterLayerAdditive;emitter.emitterSize = CGSizeMake(100 * multiplier, 0);

// Utworzenie cz�steczki emitera.CAEmitterCell* particle = [CAEmitterCell emitterCell];particle.emissionLongitude = M_PI;particle.birthRate = multiplier * 100.0;particle.lifetime = multiplier;particle.lifetimeRange = multiplier * 0.35;particle.velocity = 180;particle.velocityRange = 130;particle.emissionRange = 1.1;particle.scaleSpeed = 1.0;particle.color = [[UIColor orangeColor] colorWithAlphaComponent:0.1f].CGColor;particle.contents = (__bridge id)[UIImage imageNamed:@"spark.png"].CGImage;particle.name = @"particle";

emitter.emitterCells = [NSArray arrayWithObject:particle];[butterfly.layer addSublayer:emitter];

Sposób: podstawy Core MotionFramework Core Motion centralizuje przetwarzanie danych ruchu. Wprowadzona w iOS 4 SDK technologiaCore Motion zastępuje bezpośredni dostęp do przyśpieszeniomierza, który wcześniej przedstawiłam.Technologia oferuje punkt centralny monitorowania trzech kluczowych czujników ruchu znajdujących sięw urządzeniu. Wspomniane czujniki to żyroskop informujący o obrocie urządzenia, kompas wskazującykierunek oraz przyśpieszeniomierz wykrywający zmiany sił wzdłuż trzech osi. Czwarty punkt nazywany„ruchem urządzenia” łączy wszystkie trzy wymienione czujniki w pojedynczy system monitorowania.

Technologia Core Motion używa niezmodyfikowanych wartości wymienionych czujników w celuutworzenia możliwych do odczytu wartości, najczęściej w postaci wektorów siły. Wspomniane elementyskładają się z wymienionych poniżej właściwości.

� Położenie urządzenia (attitude) — orientacja urządzenia względem pewnego punktu odniesienia.Położenie jest przedstawione za pomocą trzech kątów o wartościach wyrażanych w radianach.

� Obrót (rotationRate) — wartość, o jaką urządzenie jest obrócone względem każdej z trzech osi.Obrót obejmuje wyrażone w radianach wartości kąta dla osi x, y i z na sekundę.

Page 31: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: podstawy Core Motion 657

� Grawitacja (gravity) — bieżący wektor przyśpieszenia urządzenia będący skutkiem normalnejgrawitacji mierzonej w wartościach G względem trzech osi x, y i z. Każda jednostka przedstawiastandardową siłę grawitacji powodowaną przez Ziemię (9,8 metra na sekundę).

� Przyśpieszenie spowodowane przez użytkownika (userAcceleration) — wektor przyśpieszeniapowodowanego przez użytkownika. Podobnie jak w przypadku grawitacji przyśpieszenie jest mierzonew wartościach G względem trzech osi x, y i z. Po dodaniu wektorów grawitacji i przyśpieszeniapowodowanego przez użytkownika otrzymujemy całkowite przyśpieszenie, jakie powoduje urządzenie.

� Pole magnetyczne (magneticField) — wektor przedstawiający ogólne wartości pola magnetycznegow sąsiedztwie urządzenia. Pole magnetyczne jest mierzone w mikroteslach wzdłuż osi x, y i z.Zapewniana jest także kalibracja dokładności w celu poinformowania aplikacji o jakości pomiaru.

Sprawdzanie dost�pno�ci czujnikówJak przeczytałeś we wcześniejszej części rozdziału, plik Info.plist możesz wykorzystać do wskazania wymaganychlub niedozwolonych do działania aplikacji czujników urządzenia. Masz więc możliwość sprawdzenia dostępnościwszystkich czujników obsługiwanych przez technologię Core Motion.

if (motionManager.gyroAvailable){ [motionManager startGyroUpdates];}

if (motionManager.magnetometerAvailable){ [motionManager startMagnetometerUpdates];}

if (motionManager.accelerometerAvailable){ [motionManager startAccelerometerUpdates];}

if (motionManager.deviceMotionAvailable){ [motionManager startDeviceMotionUpdates];}

Rozpoczęcie generowania uaktualnień nie powoduje wywoływania metod delegata, jak miało to miejscew przypadku klasy UIAccelerometer. Zamiast tego to programista jest odpowiedzialny za przechwyceniewartości. Ewentualnie możesz użyć mechanizmu opartego na bloku, którego kod będzie wykonywanypodczas każdego uaktualnienia wartości (np. startAccelerometerUpdatesToQueue:withHandler:).

Obs�uga blokuSposób 14.4 to praktycznie kod sposobu 14.3, ale zmodyfikowany do użycia technologii Core Motion.Polecenia z wywołań delegata zostały przeniesione do bloku, a wartości x i y są odczytywane z właściwościprzyśpieszeniomierza. Poza tym kod pozostał bez zmian. W tym przykładzie możesz poznać podstawy CoreMotion: utworzenie nowego menedżera ruchu. Pierwszym jego zadaniem jest sprawdzenie dostępnościprzyśpieszeniomierza. Następnie rozpoczyna się przekazywanie uaktualnionych wartości poprzez użycienowej kolejki operacyjnej istniejącej przez cały czas działania aplikacji.

Page 32: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

658 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Sposób 14.4. Podstawowy sposób u�ycia Core Motion

@implementation TestBedViewController- (void) tick{ butterfly.transform = CGAffineTransformIdentity;

// Przesuni�cie motyla zgodnie z bie��cym wektorem pr�dko�ci. CGRect rect = CGRectOffset(butterfly.frame, xvelocity, 0.0f); if (CGRectContainsRect(self.view.bounds, rect)) { butterfly.frame = rect; }

rect = CGRectOffset(butterfly.frame, 0.0f, yvelocity); if (CGRectContainsRect(self.view.bounds, rect)) { butterfly.frame = rect; }

butterfly.transform = CGAffineTransformMakeRotation(mostRecentAngle + M_PI_2);}

- (void) shutDownMotionManager{ NSLog(@"Zamknicie mened�era ruchu"); [motionManager stopAccelerometerUpdates]; motionManager = nil;

[timer invalidate]; timer = nil;}

- (void) establishMotionManager{ if (motionManager) { [self shutDownMotionManager]; }

NSLog(@"Utworzenie mened�era ruchu.");

// Utworzenie mened�era ruchu. motionManager = [[CMMotionManager alloc] init]; if (motionManager.accelerometerAvailable) { [motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] withHandler:^(CMAccelerometerData *data, NSError *error) { // Wyodr�bnienie komponentów przy�pieszeniomierza. float xx = -data.acceleration.x; float yy = data.acceleration.y; mostRecentAngle = atan2(yy, xx);

// Czy nast�pi�a zmiana kierunku? float accelDirX = SIGN(xvelocity) * -1.0f; float newDirX = SIGN(xx); float accelDirY = SIGN(yvelocity) * -1.0f; float newDirY = SIGN(yy);

Page 33: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: podstawy Core Motion 659

// Przy�pieszenie. Aby zwi�kszy� „lepko��", nale�y zmniejszy� dodawan� warto��. if (accelDirX == newDirX) { xaccel = (abs(xaccel) + 0.85f) * SIGN(xaccel); } if (accelDirY == newDirY) { yaccel = (abs(yaccel) + 0.85f) * SIGN(yaccel); }

// Wprowadzenie zmiany przy�pieszenia wzgl�dem bie��cej pr�dko�ci. xvelocity = -xaccel * xx; yvelocity = -yaccel * yy; }]; }

// Uruchomienie licznika czasu. timer = [NSTimer scheduledTimerWithTimeInterval: 0.03f target: self selector: @selector(tick) userInfo: nil repeats: YES];}

- (void) initButterfly{ CGSize size;

// Uruchomienie licznika czasu. NSMutableArray *butterflies = [NSMutableArray array]; for (int i = 1; i <= 17; i++) { NSString *fileName = [NSString stringWithFormat:@"bf_%d.png", i]; UIImage *image = [UIImage imageNamed:fileName]; size = image.size; [butterflies addObject:image]; }

// Rozpocz�cie animacji. butterfly = [[UIImageView alloc] initWithFrame:(CGRect){.size=size}]; [butterfly setAnimationImages:butterflies]; butterfly.animationDuration = 0.75f; [butterfly startAnimating];

// Okre�lenie pocz�tkowej pr�dko�ci i przy�pieszenia motyla. xaccel = 2.0f; yaccel = 2.0f; xvelocity = 0.0f; yvelocity = 0.0f;

// Dodanie motyla. butterfly.center = RECTCENTER(self.view.bounds); [self.view addSubview:butterfly];}

- (void) loadView{ [super loadView]; self.view.backgroundColor = [UIColor whiteColor]; [self initButterfly];}@end

Page 34: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

660 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Metody establishMotionManager i shutDownMotionManager pozwalają aplikacji na uruchamianie i zamykaniemenedżera ruchu na żądanie. Wymienione metody są wywoływane z poziomu delegata aplikacji, gdy aplikacjastaje się aktywna oraz kiedy jej działanie jest wstrzymywane.

- (void) applicationWillResignActive:(UIApplication *)application{ [tbvc shutDownMotionManager];}

- (void) applicationDidBecomeActive:(UIApplication *)application{ [tbvc establishMotionManager];}

Wymienione metody zapewniają elegancki sposób zamykania i wznawiania usług ruchu w odpowiedzina aktualny stan aplikacji.

Sposób: pobieranie i u�ywanie informacjio po�o�eniu urz�dzeniaWyobraź sobie iPada postawionego na biurku. Możesz przechylić iPada i spojrzeć na obraz wyświetlany najego ekranie. A teraz wyobraź sobie obracanie tym iPadem leżącym płasko na biurku, ale podczas obracaniaurządzeniem obraz pozostaje nieruchomy i zachowuje doskonałą pozycję względem otaczającego go świata.Niezależnie od tego, jak będziesz obracał iPadem, obraz pozostanie nieruchomy, ponieważ widok będziesamodzielnie się uaktualniał w celu zrównoważenia fizycznego ruchu urządzeniem. Na takiej zasadzie działakod przedstawiony w sposobie 14.5.

Sposób 14.5. U�ycie uaktualnie� o po�o�eniu urz�dzenia w celu zmiany po�o�enia obrazu

- (void) shutDownMotionManager{ NSLog(@"Wy��czenie mened�era ruchu"); [motionManager stopDeviceMotionUpdates]; motionManager = nil;}

- (void) establishMotionManager{ if (motionManager) { [self shutDownMotionManager]; }

NSLog(@"W��czenie mened�era ruchu.");

// W��czenie mened�era ruchu.

Page 35: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

U�ycie zdarze� ruchu do wykrycia wstrz��ni�cia urz�dzeniem 661

motionManager = [[CMMotionManager alloc] init]; if (motionManager.deviceMotionAvailable) { [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler: ^(CMDeviceMotion *motion, NSError *error) { CATransform3D transform; transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0); transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0); transform = CATransform3DRotate(transform, motion.attitude.yaw, 0, 0, 1); imageView.layer.transform = transform; }]; }}

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Obraz dostosowuje się niezależnie od sposobu, w jaki będziesz trzymał urządzenie. Oprócz tego możeszpodnieść urządzenie i zmieniać jego orientację w przestrzeni. Jeżeli odwrócisz urządzenie i spojrzysz na nie,wtedy zobaczysz odwrócony „dół” obrazu. Urządzeniem możesz obracać w obu osiach: jedna przebiegapionowo od przycisku Początek do aparatu, natomiast druga poziomo od lewej do prawej strony iPada.Kolejna oś — pierwsza, którą poznasz — przechodzi jakby „na wylot” przez środek urządzenia, od punktuznajdującego się pod iPadem aż do punktu nad urządzeniem. Kiedy obracasz urządzeniem, reakcją obrazujest utworzenie wirtualnego świata w tym urządzeniu.

W kodzie sposobu 14.5 pokazano, jak uzyskać powyższy efekt za pomocą kilku prostych przekształceńgeometrycznych. Kod tworzy menedżera ruchu, pobiera uaktualnienia dotyczące ruchu urządzenia, a następniena podstawie otrzymanych danych przeprowadza transformację obrazu.

U�ycie zdarze� ruchudo wykrycia wstrz��ni�cia urz�dzeniemKiedy iPhone wykrywa zdarzenie ruchu, przekazuje je do obiektu aktualnie posiadającego przypisany statusFirst Responder, czyli do podstawowego obiektu w łańcuchu odpowiedzi. Obiekty, które mogą mieć przypisanywymieniony status, potrafią przetwarzać zdarzenia. Zaliczamy do nich wszystkie widoki i okna, a także obiektaplikacji.

Łańcuch odpowiedzi definiuje hierarchię obiektów, które mogą odpowiadać na zdarzenia. Kiedy obiektznajdujący się na początku łańcucha odpowiedzi otrzymuje zdarzenie, to zdarzenie nie jest przekazywanedalej, ale obsłużone przez dany obiekt. Jeśli obiekt nie potrafi obsłużyć zdarzenia, wówczas przekazuje jedo kolejnego obiektu w łańcuchu.

Obiekt może odpowiadać na zdarzenia, gdy ma przypisany status First Responder za pomocą metodyo nazwie becomeFirstResponder. W przedstawionym poniżej fragmencie kodu obiekt UIViewControllerbędzie odpowiadał na zdarzenia, gdy jego widok pojawi się na ekranie. Po usunięciu widoku z ekranu obiektprzestanie odpowiadać na zdarzenia.

Page 36: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

662 Rozdzia� 14. Mo�liwo�ci urz�dzenia

- (BOOL)canBecomeFirstResponder{ return YES;}

// Przypisanie statusu First Responder po wy�wietleniu widoku na ekranie.- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self becomeFirstResponder];}

// Rezygnacja ze statusu First Responder po usuni�ciu widoku z ekranu.- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self resignFirstResponder];}

Obiekty z przypisanym statusem First Responder otrzymują wszystkie zdarzenia dotyku i ruchu.Wywołania zwrotne ruchu odpowiadają wywołaniom zwrotnym dotknięć, omówionym w rozdziale 8.zatytułowanym „Gesty i dotknięcia”.

� motionBegan:withEvent: — ta metoda wskazuje na początek zdarzenia ruchu. W trakcie pisanianiniejszej książki istniał tylko jeden rodzaj rozpoznawanego zdarzenia: wstrząśnięcie. To się możezmienić w przyszłości, więc w kodzie warto umieścić procedurę sprawdzania typu ruchu.

� motionEnded:withEvent: — ta metoda jest wywoływana na końcu zdarzenia ruchu.

� motionCancelled:withEvent: — podobnie jak w przypadku dotknięć, także ruch może zostaćprzerwany przez połączenie przychodzące lub inne zdarzenie systemowe. Firma Apple zalecaimplementację w kodzie produkcyjnym wszystkich trzech wymienionych tutaj metod (i podobniewszystkich czterech metod dotyczących obsługi dotknięć).

Przedstawiony poniżej fragment kodu pokazuje przykład użycia metod obsługi zdarzeń ruchu.Po przetestowaniu tej aplikacji w rzeczywistym urządzeniu możesz mieć kilka spostrzeżeń. Przede wszystkimz punktu widzenia użytkownika zdarzenia rozpoczynające i kończące ruch występują niemal jednocześnie.Odtwarzanie dźwięku w obu wymienionych rodzajach zdarzeń jest zabójcze. Ponadto istnieje tendencjaw kierunku wykrywania gestu wstrząśnięcia urządzeniem na boki. iPhone lepiej sprawdza się podczaswykrywania wstrząśnięcia urządzeniem na boki niż do przodu i do tyłu. Wreszcie zastosowana przez firmęApple implementacja używa lekkiego podejścia blokowania. Nie ma możliwości wygenerowania nowegozdarzenia ruchu przed upływem sekundy od chwili przetworzenia poprzedniego. Takie samo blokowaniejest używane w gestach „wstrząśnij, aby pomieszać” i „wstrząśnij, aby cofnąć”.

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{ // Odtwórz d�wi�k po rozpocz�ciu gestu wstrz��ni�cia. if (motion != UIEventSubtypeMotionShake) { return; } [self playSound:startSound];}

Page 37: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza do wykrycia gestu wstrz��ni�cia 663

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{ // Odtwórz d�wi�k po zakoczeniu gestu wstrz��ni�cia. if (motion != UIEventSubtypeMotionShake) { return; } [self playSound:endSound];}

Sposób: u�ycie przy�pieszeniomierzado wykrycia gestu wstrz��ni�ciaW sposobie 14.6 przedstawiłam rozwiązanie powielające przygotowany przez firmę Apple system wykrywaniaruchu, ale bez konieczności przekazywania zdarzeń obiektowi z przypisanym statusem First Responder. Projektjest zbudowany w oparciu o dwa kluczowe parametry: poziom czułości określający granicę, która musi byćprzekroczona w celu rozpoznania wstrząśnięcia, oraz czas blokady określający częstotliwość, z jaką mogąbyć generowane zdarzenia wstrząśnięcia.

Sposób 14.6. Wykrywanie gestu wstrz��nicia za pomoc� przy�pieszeniomierza

@implementation AccelerometerHelper- (id) init{ if (!(self = [super init])) { return self; }

self.triggerTime = [NSDate date];

// Bie��cy wektor si�y. cx = UNDEFINED_VALUE; cy = UNDEFINED_VALUE; cz = UNDEFINED_VALUE;

// Ostatni wektor si�y. lx = UNDEFINED_VALUE; ly = UNDEFINED_VALUE; lz = UNDEFINED_VALUE;

// Poprzedni wektor si�y. px = UNDEFINED_VALUE; py = UNDEFINED_VALUE; pz = UNDEFINED_VALUE;

self.sensitivity = 0.5f; self.lockout = 0.5f;

// Przypisanie delegata dla przy�pieszeniomierza. [[UIAccelerometer sharedAccelerometer] setDelegate:self];

return self;}

Page 38: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

664 Rozdzia� 14. Mo�liwo�ci urz�dzenia

- (void) setX: (float) aValue{ px = lx; lx = cx; cx = aValue;}

- (void) setY: (float) aValue{ py = ly; ly = cy; cy = aValue;}

- (void) setZ: (float) aValue{ pz = lz; lz = cz; cz = aValue;}

- (float) dAngle{ if (cx == UNDEFINED_VALUE) { return UNDEFINED_VALUE; } if (lx == UNDEFINED_VALUE) { return UNDEFINED_VALUE; } if (px == UNDEFINED_VALUE) { return UNDEFINED_VALUE; }

// Obliczenia dla pierwszej pary. float dot1 = cx * lx + cy * ly + cz * lz; float a = ABS(sqrt(cx * cx + cy * cy + cz * cz)); float b = ABS(sqrt(lx * lx + ly * ly + lz * lz)); dot1 /= (a * b);

// Obliczenia dla drugiej pary. float dot2 = lx * px + ly * py + lz * pz; a = ABS(sqrt(px * px + py * py + pz * pz)); dot2 /= a * b;

// Zwrot ró�nicy pomi�dzy k�tami wektorów. return acos(dot2) - acos(dot1);}

- (BOOL) checkTrigger{ if (lx == UNDEFINED_VALUE) { return NO; }

// Sprawdzenie, czy mo�na przetworzy� nowe dane if ([[NSDate date] timeIntervalSinceDate:self.triggerTime] < self.lockout)

Page 39: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ycie przy�pieszeniomierza do wykrycia gestu wstrz��ni�cia 665

{ return NO; }

// Pobranie aktualnej zmiany k�ta. float change = [self dAngle];

// Je�eli dwie próbki nie zosta�y jeszcze zebrane, warto�ci� zwrotn� jest NO. if (change == UNDEFINED_VALUE) { return NO; }

// Czy obliczona warto�� jest wi�ksza od granicznej? if (change > self.sensitivity) { self.triggerTime = [NSDate date]; return YES; } else { return NO; }}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ // Przystosowanie warto�ci do standardowego systemu wspó�rz�dnych. [self setX:-acceleration x]; [self setY:acceleration.y]; [self setZ:acceleration.z];

// Wszystkie zdarzenia przy�pieszeniomierza. if (self.delegate && [self.delegate respondsToSelector:@selector(ping)]) { [self.delegate performSelector:@selector(ping)]; }

// Wszystkie zdarzenia wstrz��ni�cia. if ([self checkTrigger] && self.delegate && [self.delegate respondsToSelector:@selector(shake)]) { [self.delegate performSelector:@selector(shake)]; }}@end

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Klasa AccelerometerHelper przechowuje trzy wartości przyśpieszeniomierza. Każda z wartości przedstawiawektor siły w przestrzeni 3D. Każda kolejna para tych trzech wartości może być analizowana w celu określeniakąta pomiędzy dwoma wektorami. W omawianym przykładzie kąty pomiędzy pierwszymi dwoma elementami

Page 40: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

666 Rozdzia� 14. Mo�liwo�ci urz�dzenia

i dwoma kolejnymi pomagają w ustaleniu wystąpienia gestu wstrząśnięcia. Kąt wyszukuje parę, w którejdrugi kąt jest większy od pierwszego. Jeżeli wartość kątowa wzrosła wystarczająco dużo, wówczas wykrytyzostanie gest wstrząśnięcia.

Klasa pomocnicza nie wywołuje metod delegata aż do przekazania drugiego zdarzenia. Blokadauniemożliwia przeprowadzanie kolejnych wywołań aż do chwili upłynięcia zdefiniowanej ilości czasu. Takierozwiązanie jest zaimplementowane poprzez przechowywanie godziny ostatniego zdarzenia wstrząśnięcia.Wszystkie wstrząśnięcia, które nastąpią przed upływem zdefiniowanej ilości czasu, zostaną zignorowane.Następnie mogą być generowane nowe gesty wstrząśnięcia.

Dostarczany przez firmę Apple system wykrywania wstrząśnięcia wykorzystuje znacznie bardziejskomplikowaną analizę danych przyśpieszeniomierza. Zgodnie z informacjami technicznymi na ten tematsystem wyszukuje oscylacji w około ośmiu do dziesięciu kolejnych punktach danych. W kodzie sposobu 14.6zastosowano mniej skomplikowane podejście i zademonstrowano, jak pracować z nieprzetworzonymi danymiprzyśpieszeniomierza w celu dostarczenia wyników przygotowanych na podstawie wspomnianych danych.

Sposób: u�ywanie ekranów zewn�trznychIstnieje wiele sposobów używania ekranów zewnętrznych z iOS 5. Weźmy np. iPada 2, który oferujewbudowaną funkcję reprodukcji wideo na zewnętrznym ekranie. Dzięki użyciu przewodu VGA lub HDMItreść możesz wyświetlać zarówno w iPadzie, jak i na zewnętrznym ekranie. Począwszy od systemu iOS 5,wybrane urządzenia pozwalają na bezprzewodową reprodukcję wideo do Apple TV za pomocą technologiiAirPlay. Wspomniana funkcja reprodukcji jest wyjątkowo użyteczna, ale w iOS nie jesteś ograniczonyjedynie do kopiowania treści z jednego ekranu na drugi.

Klasa UIScreen pomaga w wykryciu i niezależnym użyciu zewnętrznego ekranu, który można potraktowaćjako nowe okno i dla którego można przygotować treść oddzielną od wyświetlanej na ekranie urządzenia iOS.Zewnętrzny ekran można podłączyć zarówno przewodem, jak i bezprzewodowo do Apple TV za pomocąAirPlay (począwszy od iOS 5 i iPada 2).

Geometria ma duże znaczenie i zaraz dowiesz się dlaczego. Obecnie urządzenia iOS korzystają z ekranównastępujących urządzeń: stary iPhone o rozdzielczości 320×480 pikseli, Retina w iPhone’ie o rozdzielczości640×960 pikseli, stary iPad o rozdzielczości 1024×768 pikseli i Retina w iPadzie o rozdzielczości 2048×1536pikseli. Typowy obraz ma rozdzielczość 720×480 pikseli (480i i 480p), VGA ma rozdzielczości 1024×768i 1280×720 (720p), a ponadto jest jeszcze dostępna rozdzielczość HD 1920×1080 pikseli (poprzez HDMI).

Dodaj do tego problemy z tak zwanym overscanem oraz inne ograniczenia wyświetlacza docelowego,a wyjście wideo szybko stanie się wyzwaniem pod względem geometrii. Na szczęście firma Apple oferujeodpowiednie rozwiązanie w systemie iOS 5. Zamiast próbować tworzyć związek typu jeden do jednegopomiędzy ekranem wbudowanym w urządzenie i zewnętrznym, po prostu utwórz treść w oparciu o dostępnewłaściwości ekranu. Możesz więc utworzyć okno, wypełnić je treścią, a następnie wyświetlić.

Ogólnie rzecz biorąc, jeśli zamierzasz tworzyć aplikacje korzystające z zewnętrznego ekranu, upewnij sięo posiadaniu co najmniej jednego przewodu każdego z wymienionych typów (kompozytowe, komponentowe,VGA i HDMI), jak również obsługującego technologię AirPlay iPada, co pozwoli Ci na przetestowaniekażdej możliwej konfiguracji. Przewody produkowane przez firmy trzecie mogą nie działać, więc upewnijsię, że kupujesz przewody produkcji Apple.

Page 41: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ywanie ekranów zewn�trznych 667

Wykrywanie ekranuKlasa UIScreen informuje o liczbie dostępnych ekranów. Jeżeli ich liczba jest większa niż jeden, wtedywiadomo, że podłączony został ekran zewnętrzny. Pierwszym elementem tablicy screens zawsze jest ekranwbudowany w urządzenie iOS.

#define SCREEN_CONNECTED ([UIScreen screens].count > 1)

Każdy ekran podaje swoje wymiary (fizyczne, wyrażone w punktach) oraz skalę ekranu (punkty względempikseli). Dwa standardowe powiadomienia pozwalają na obserwację podłączania i odłączania ekranów odurządzenia.

// Rejestracja otrzymywania powiadomie o w��czeniu i wy��czeniu ekranu.[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];

Połączenie oznacza dowolnego rodzaju połączenie, zarówno przewodowe, jak i bezprzewodowe w technologiiAirPlay. Po otrzymaniu tego rodzaju uaktualnienia upewnij się o policzeniu ekranów i dostosowaniu interfejsuużytkownika do właściwości nowych ekranów.

Do Ciebie należy zadanie konfiguracji okien po podłączeniu i odłączeniu ekranu od urządzenia iOS.Każdy ekran powinien posiadać własne okno przeznaczone do zarządzania treścią wyświetlaną na tymekranie. Po wykryciu odłączenia ekranu nie zatrzymuj okna w pamięci, usuń je i powtórnie je utwórzpo wykryciu ponownego podłączenia ekranu.

Pobieranie informacji o rozdzielczo�ci ekranuKażdy ekran posiada właściwość availableModes, to tablica obiektów rozdzielczości uporządkowanychw kolejności od najmniejszej do największej. Z kolei każdy tryb posiada właściwość size wskazującąrozdzielczość ekranu wyrażoną w pikselach. Wiele ekranów obsługuje różne rozdzielczości. Na przykładwyświetlacz VGA może obsługiwać kilka różnych rozdzielczości, których liczba zależy od producenta ekranu.Zawsze dostępna jest przynajmniej jedna rozdzielczość, ale jeśli ekran udostępnia ich więcej, to użytkownikowirównież powinieneś pozwolić na ich wybór. W tym celu odpowiednio przygotuj kod aplikacji.

Konfiguracja wyj�cia wideoPo pobraniu obiektu zewnętrznego ekranu z tablicy [UIScreen screens] sprawdź dostępne tryby i wybierzjeden z nich, który będzie następnie używany. Ogólnie rzecz biorąc, zawsze powinieneś wybierać ostatnielement tablicy, udostępniając tym samym użytkownikowi największą możliwą rozdzielczość, ewentualniemożesz wybrać pierwszy — oznaczający najniższą rozdzielczość.

W celu rozpoczęcia przesyłania strumienia wideo musisz utworzyć egzemplarz UIWindow i dostosowaćjego wielkość do używanej rozdzielczości ekranu. W oknie trzeba umieścić nowy widok pozwalający nawyświetlenie treści. Kolejny krok to przypisanie okna zewnętrznemu ekranowi i uczynienie go podstawowymi widocznym. W ten sposób okno zostanie wyświetlone i przygotowane do użycia. Kiedy zakończysz pracęz oknem na ekranie zewnętrznym, ekran w urządzeniu ponownie ustaw jako podstawowy. Nie pomijaj tegokroku! Dla użytkownika nie ma nic bardziej irytującego niż przekonanie się, że drogie urządzenie iOS niereaguje na dotknięcia ekranu.

Page 42: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

668 Rozdzia� 14. Mo�liwo�ci urz�dzenia

self.outwindow = [[UIWindow alloc] initWithFrame:theFrame];outwindow.screen = secondaryScreen;[outwindow makeKeyAndVisible];[delegate.view.window makeKeyAndVisible];

Dodanie obiektu DisplayLinkObiekt DisplayLink to rodzaj licznika czasu, który jest zsynchronizowany z częstotliwością odświeżaniaekranu. Częstotliwość odświeżania ramki możesz zmienić poprzez modyfikację właściwości frameInterval.Wartość domyślna tej właściwości wynosi 1. Ustawienie wyższej wartości spowoduje zmniejszenieczęstotliwości odświeżania. Tak więc wartość 2 oznacza zmniejszenie o połowę częstotliwości odświeżania.Obiekt DisplayLink utwórz po podłączeniu ekranu do urządzenia. Klasa UIScreen implementuje metodę,która zwraca obiekt DisplayLink dla ekranu. Dla wymienionego obiektu możesz zdefiniować cel orazwskazać wywoływany selektor.

Obiekt DisplayLink regularnie wywołuje zdefiniowaną metodę, pozwalając Ci w ten sposób nauaktualnienie treści wyświetlanej na ekranie. Zmniejszenie częstotliwości powoduje mniejsze obciążenieprocesora, ale kosztem utraty niektórych ramek. Trzeba koniecznie pamiętać o tym koszcie, zwłaszczaw przypadku bezpośredniej manipulacji interfejsami wymagającymi wiele pracy ze strony procesora w celuudzielenia odpowiedzi na działania użytkownika.

W dalszej części rozdziału znajdziesz kod sposobu 14.7, w którym użyto najczęściej spotykanych trybówdla pętli działania, zapewniając tym samym najmniejsze opóźnienie. Po zakończeniu pracy z obiektemDisplayLink wywołaj metodę invalidate, która powoduje usunięcie obiektu z pętli działania.

Kompensacja overscanninguPoprzez przypisanie wartości właściwości overscanCompensation klasa UIScreen pozwala na kompensacjęw przypadku utraty pikseli na krawędziach ekranu. Ta technika została przedstawiona w dokumentacjiApple; w zasadzie odpowiada sytuacji, gdy chcesz obciąć treść lub dopełnić ją czarną przestrzenią.

VIDEOkitW sposobie 14.7 przedstawiłam VIDEOkit, czyli klienta ekranu zewnętrznego. Zawiera on wszystkiefunkcje niezbędne do konfiguracji i użycia ekranu zewnętrznego podłączonego zarówno przewodowo,jak i bezprzewodowo. Monitorowanie ekranu włączasz poprzez wywołanie startupWithDelegate:.Przekaż podstawowy kontroler widoku, którego zadaniem będzie utworzenie treści na zewnętrznym ekranie.

Sposób 14.7. VIDEOkit

@interface VIDEOkit : NSObject{ UIImageView *baseView;}@property (nonatomic, weak) UIViewController *delegate;@property (nonatomic, strong) UIWindow *outwindow;@property (nonatomic, strong) CADisplayLink *displayLink;+ (void) startupWithDelegate: (id) aDelegate;@end

@implementation VIDEOkit@synthesize delegate;

Page 43: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Sposób: u�ywanie ekranów zewn�trznych 669

@synthesize outwindow, displayLink;

static VIDEOkit *sharedInstance = nil;

- (void) setupExternalScreen{ // Sprawdzenie w poszukiwaniu brakuj�cych ekranów. if (!SCREEN_CONNECTED) { return; }

// Konfiguracja ekranu zewn�trznego. UIScreen *secondaryScreen = [[UIScreen screens] objectAtIndex:1]; UIScreenMode *screenMode = [[secondaryScreen availableModes] lastObject]; CGRect rect = CGRectMake(0.0f, 0.0f, screenMode.size.width, screenMode.size.height);

// Utworzenie nowego okna. self.outwindow = [[UIWindow alloc] initWithFrame:CGRectZero]; outwindow.screen = secondaryScreen; outwindow.screen.currentMode = screenMode; // Podzi�kowania dla Scotta Lawrence'a. [outwindow makeKeyAndVisible]; outwindow.frame = rect;

// Dodanie do okna podstawowego widoku. baseView = [[UIImageView alloc] initWithFrame:rect]; baseView.backgroundColor = [UIColor clearColor]; [outwindow addSubview:baseView];

// Ustawienie jako okno g�ówne. [delegate.view.window makeKeyAndVisible];}

- (void) updateScreen{ // Przerwanie, je�li ekran zosta� od��czony. if (!SCREEN_CONNECTED && outwindow) { self.outwindow = nil; }

// (Ponowna) inicjalizacja, je�li nie ma okna na ekranie zewn�trznym. if (SCREEN_CONNECTED && !outwindow) { [self setupExternalScreen]; }

// Przerwanie w przypadku napotkania dziwnego b��du. if (!self.outwindow) { return; }

// Przeprowadzenie uaktualnienia. SAFE_PERFORM_WITH_ARG(delegate, @selector(updateExternalView:), baseView);}

- (void) screenDidConnect: (NSNotification *) notification{ NSLog(@"Ekran zosta� pod��czony");

Page 44: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

670 Rozdzia� 14. Mo�liwo�ci urz�dzenia

UIScreen *screen = [[UIScreen screens] lastObject]; if (displayLink) { [displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; [displayLink invalidate]; self.displayLink = nil; }

// Sprawdzenie istnienia obiektu DisplayLink. if (!displayLink) { self.displayLink = [screen displayLinkWithTarget:self selector:@selector(updateScreen)]; [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; }}

- (void) screenDidDisconnect: (NSNotification *) notification{ NSLog(@"Ekran zosta� od��czony."); if (displayLink) { [displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; [displayLink invalidate]; self.displayLink = nil; }}

- (id) init{ if (!(self = [super init])) { return self; }

// Obs�uga utworzenia okna na ekranie zewn�trznym. if (SCREEN_CONNECTED) { [self screenDidConnect:nil]; }

// Rejestracja powiadomie informuj�cych o pod��czeniu lub od��czeniu ekranu. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil];

return self;}

- (void) dealloc{ [self screenDidDisconnect:nil]; self.outwindow = nil;}

Page 45: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

I jeszcze jedno: sprawdzenie dost�pnej ilo�ci wolnego miejsca na dysku 671

+ (VIDEOkit *) sharedInstance{ if (!sharedInstance) { sharedInstance = [[self alloc] init]; } return sharedInstance;}

+ (void) startupWithDelegate: (id) delegate{ [[self sharedInstance] setDelegate:delegate];}@end

Pobierz kod przedstawionego sposobuAby pobra kod przedstawionego tutaj sposobu, przejd� na stron� ftp://ftp.helion.pl/przyklady/ios5pp.zip,lub je�li pobra�e� obraz dysku zawieraj�cy wszystkie przyk�ady przedstawione w ksi��ce, to przejd� dokatalogu przeznaczonego dla rozdzia�u 14. i otwórz projekt dla tego sposobu.

Wewnętrzna metoda init rozpoczyna nasłuchiwanie zdarzeń informujących o podłączeniu lub odłączeniuekranu, a następnie tworzy lub usuwa okno. Metoda delegata (updateExternalView:) jest wywoływana przezobiekt DisplayLink. Parametrem jest widok znajdujący się w zewnętrznym oknie; we wspomnianym widokudelegat może wyświetlić przygotowaną treść.

W omawianym przykładzie kontroler widoku przechowuje wartość koloru lokalnego, a następnie używajej na ekranie zewnętrznym.

- (void) updateExternalView: (UIImageView *) aView{ aView.backgroundColor = color;}

- (void) action: (id) sender{ color = [UIColor randomColor];}

Każde naciśnięcie przycisku powoduje wygenerowanie przez kontroler widoku nowego koloru. KiedyVIDEOkit nakazuje kontrolerowi uaktualnienie zewnętrznego widoku, wspomniany kolor jest używanyjako kolor tła. Możesz się przekonać, że tło na ekranie zewnętrznym jest natychmiast uaktualniane nowowygenerowanym kolorem.

I jeszcze jedno: sprawdzenie dost�pnej ilo�ciwolnego miejsca na dyskuKlasa NSFileManager pozwala na sprawdzenie wolnej ilości miejsca pozostałej w urządzeniu iOS, jak równieżcałkowitej ilości miejsca na dysku dostarczanej przez urządzenie iOS. W listingu 14.1 zademonstrowałam, jaksprawdzić obie wartości i wyświetlić je w postaci łatwego w odczycie ciągu tekstowego. Zwrócone wartościpodają ilość miejsca wyrażoną w bajtach.

Page 46: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

672 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Listing 14.1. Pobranie informacji o wielko�ci systemu plików i pozosta�ej ilo�ci wolnego miejsca

- (NSString *) commaFormattedStringWithLongLong: (long long) num{ // Wygenerowanie odpowiednio sformatowanego ci�gu tekstowego. // Alternatywnym rozwi�zaniem jest u�ycie egzemplarza NSNumberFormatter. if (num < 1000) { return [NSString stringWithFormat:@"%d", num]; } return [[self commasForNumber:num/1000] stringByAppendingFormat:@",%03d", (num % 1000)];}

- (void) action: (UIBarButtonItem *) bbi{ NSFileManager *fm = [NSFileManager defaultManager]; NSDictionary *fattributes = [fm fileSystemAttributesAtPath:NSHomeDirectory()]; NSLog(@"Ca�kowita ilo�� miejsca na dysku: %@", [self commaFormattedStringWithLongLong:[[fattributes objectForKey:NSFileSystemSize] longLongValue]]); NSLog(@"Wolna ilo�� miejsca na dysku: %@", [self commasForNumber:[[fattributes objectForKey:NSFileSystemFreeSize] longLongValue]]);}

PodsumowanieW tym rozdziale przedstawiłam podstawowe sposoby interakcji z urządzeniem iPhone. Dowiedziałeś się, jakpobrać informacje dotyczące urządzenia, sprawdzić poziom naładowania baterii oraz nasłuchiwać zdarzeńczujnika zbliżeniowego. Poznałeś też sposoby rozróżniania urządzeń iPod touch, iPhone i iPad oraz określaniamodelu urządzenia, w którym została uruchomiona aplikacja. Przedstawiłam przyśpieszeniomierz i jego użyciew kilku przykładach, począwszy od prostego „wyszukania” aż po bardziej skomplikowany algorytm wykrywaniagestu wstrząśnięcia. Poznałeś także technologię Core Motion i dowiedziałeś się, jak tworzyć bloki pozwalającena udzielanie odpowiedzi w czasie rzeczywistym na zdarzenia urządzenia. Wreszcie omówiłam temat dodawaniaobsługi ekranów zewnętrznych w aplikacjach. Zanim przejdziesz dalej, poświęć chwilę i przemyśl kilka kwestiidotyczących sposobów przedstawionych w rozdziale.

� Przyśpieszeniomierz w iPhone’ie stanowi uzupełnienie oferowanego przez urządzenie interfejsudotykowego. Dane przyśpieszeniomierza możesz wykorzystać w celu rozbudowy interakcjiz użytkownikiem poza „dotknij tutaj” i umożliwić aplikacji reakcję na obrót urządzeniem.

� Niskiego poziomu wywołania mogą być przyjazne dla aplikacji zgłaszanej do sklepu iTunes App Store.Nie zależą od API firmy Apple, które może być zmienione w aktualnym wydaniu oprogramowania typufirmware. Wywołania systemu UNIX mogą być kłopotliwe, ale wiele z nich jest w pełni obsługiwanychprzez urządzenia z rodziny iOS.

� Nie zapominaj o ograniczeniach urządzeń. Przed przeprowadzeniem operacji wymagającejintensywnego przetwarzania pliku sprawdź ilość wolnej pamięci w urządzeniu. Podobnie przedoperacją wymagającą użycia pełnej mocy procesora sprawdź, czy urządzenie jest podłączonedo źródła zasilania.

Page 47: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Podsumowanie 673

� Wykorzystuj technologię Core Motion. Dostarczane przez nią dane w czasie rzeczywistym sąpodstawą dla wielu interesujących aplikacji na platformie iOS.

� Skoro technologia AirPlay pozwala na pozbycie się przewodów łączących urządzenie iOSz zewnętrznym ekranem, masz możliwość użycia wyjścia wideo w celu utworzenia jeszcze bardziejekscytujących projektów, niż wcześniej sądziłeś. Technologia AirPlay i zewnętrzne ekrany mogąpomóc w przekształceniu urządzenia iOS na zdalnego pilota do gier i narzędzi wyświetlających treśćna dużym ekranie i kontrolujących tę treść za pomocą mniejszego urządzenia iOS.

� Podczas zgłaszania aplikacji do sklepu iTunes App Store używaj pliku Info.plist w celu określeniafunkcji urządzenia wymaganych dla danej aplikacji. iTunes używa wspomnianej listy, ustalając, czydana aplikacja może zostać pobrana w konkretnym urządzeniu i czy będzie w nim prawidłowo działała.

Page 48: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

674 Rozdzia� 14. Mo�liwo�ci urz�dzenia

Page 49: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz

Aadres IP, 681akcje, 209akredytacja, 57album zdjęć, 351, 356algorytm Canny, 387, 390alokacja

obiektu, 114pamięci, 88

analizaetykiety, 186kodu, 195próbki rastrowej, 392

analizator statyczny, 195animacja, 338

reakcji przycisku, 459UIView, 338UIImageView, 346warunkowa, 340widoku, 346

ANSI C, 24API Cocoa, 84API SDK, 180aplikacja Google Mobile, 649aplikacje, 159aplikacje iOS, 60ARC, Automated Reference

Counting, 36, 103, 121, 135archiwa IPA, 73archiwizacja interfejsu, 423atrybuty

komórki, 556tekstu, 526, 576

automatyczna zmianawidoku, 263wielkości, 261, 264

Bbazowa wersja SDK, 203biblioteka

Cocoa Touch, 37Media, 269

bibliotekiobiektów, 171szablonów plików, 455

bitmapa ARGB, 389blok completion, 340, 346bloki, 81, 117, 121, 340bloki animacji, 345błędne dopasowanie sekcji, 574błędy leksykalne, 128buforowanie, 192

Ccertyfikat, 54, 203CF, Core Foundation, 134ciągi tekstowe, 98, 142

konwersja na liczbę, 146konwersja na tablicę, 144modyfikowanie, 146odczyt z pliku, 144porównywanie, 146wielkość znaków, 146wyszukiwanie, 145zakres, 145

zapis do pliku, 143żądanie podciągów, 145

cofnięcieoperacji, 426, 510poprzez potrząśnięcie, 429

Core Animation, 344Core Data, 597Core Image, 371Core Location, 43Core Motion, 43CoreMedia, 372CoreVideo, 372cykl życiowy obiektu, 102czcionki, 519czujnik zbliżeniowy, 648

Ddane, 45

uwierzytelniające, 697wejściowe, 502

daty, 147, 593definiowanie

bloku, 118protokołu, 138

deklarowanieinterfejsu, 86klasy, 87metod, 93odniesienia do bloku, 119właściwości, 106wywołań zwrotnych, 140

delegataplikacji, 63komunikatu, 618

Page 50: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

718 Skorowidz

delegowanie, 77detektor danych, 517dodawanie

akcji, 249animacji do kontrolek, 459dźwięku kliknięcia, 509elementów paska, 485elementów widoku, 495etykiet, 249filtru, 379komórek, 568kontrolki segmentowanej, 277metod, 98obiektów, 601obsługi klawiatury, 505outletów, 250plików, 247podwidoku, 317przycisków, 453suwaka, 291szablonów, 266widoków, 249, 257własnych czcionek, 520zmiennych egzemplarza, 98odbicia, 347

dokumentacja, 180dokumenty PDF, 398dostęp do

aparatu, 371zasobów, 362danych, 45danych rastrowych, 392informacji, 104obiektów zbioru, 151pliku, 153podciągu tekstowego, 144sieci, 676słownika, 150ścieżki indeksu, 605tablicy, 149wartości boolowskich, 560właściwości, 111zdjęć, 356

dostępnośćczujników, 657witryny, 685

dotknięcia, 405

drzewohierarchii widoku, 315nawigacji, 311przetwarzania, 707, 710wyników, 709

duży tekst, 543dyrektywa

#import, 87#include, 87@synthesize, 109

dystrybucja, 208tymczasowa, 211tymczasowa OTA, 213

dziedziczeniemetod, 93wielokrotne, 156

dzienniki zdarzeń, 197dźwięk, 42dźwięk kliknięcia, 509dźwięki systemowe, 637

Eedycja

danych, 610tabeli, 564, 610widoku, 171

edytorinteraktywny, 70tekstów, 509Xcode, 599

efekt odbicia, 345egzemplarz

MKMapView, 221MPMoviePlayerController, 229NSMutableURLRequest, 690NSURLCredential, 698UIActionSheet, 630UIActivityIndicator, 624UIActivityIndicatorView, 621UIAlertView, 319UIButton, 222UIDatePicker, 590UIImage, 457UIImagePickerController, 360,

370, 402UIImageView, 220

UILabel, 220UIPi, 585UIPickerView, 586UIScrollView, 221, 402, 478UISegmentedControl, 222UITableView, 548UITableViewSeparatorView,

314UITextView, 517UIViewController, 258, 282UIWebView, 517

ekran, 41ekrany zewnętrzne, 666EXIF, 376

Ffazy dotknięcia, 406filtr Core Image, 379filtrowanie tekstu, 511flesz, 365format EXIF, 376formatowanie daty, 592framework, 59

AVFoundation, 371Carbon, 114Cocoa, 25, 115Cocoa Touch, 115Core Data, 597Core Foundation, 114Core Graphics, 487Core Motion, 656Core Text, 521Foundation, 147, 169Graphics, 169MediaPlayer, 229, 637MessageUI, 228Quartz 2D, 487Quartz Core, 53System Configuration, 676Twitter, 706UIKit, 169, 308

funkcjaCFShow, 81CFUUIDCreateString(), 176CGPointApplyAffineTransform(),

419

Page 51: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz 719

CGRectContainsRect(), 331CGRectMake(), 326MPVolumeSettingsAlertIs

Visible(), 640NSLog(), 81, 98NSStringFrom(), 100objc_unretainedObject(), 134printf(), 81, 88, 99SCNetworkReachability

CreateWithAddress(), 685sizeof(), 88sprintf(), 107Storyboard, 235UIApplicationMain(), 62, 179

funkcjecofnij i przywróć, 612KVC, 111KVO, 112wyszukiwania, 578

funkcjonalność UITableViewCell,561

Ggałka suwaka, 465Gargabe Collector, 114generowanie

plików, 600treści, 533

geometriaobrazu, 377widoku, 326

gest, 408długiego naciśnięcia, 409machnięcia, 408, 445machnięcia w komórce, 568obrotu, 409przeciągania, 445przesunięcia, 409stuknięcia, 408uszczypnięcia, 408wstrząśnięcia, 663

git, 31GitHub, 31GPS, 43grafika rastrowa, 418

grawitacja, 657grupa

Editor, 165View, 165

grupy sekcji, 606

Hharmonogram powiadomień

lokalnych, 635hermetyzacja, 105hierarchia

klas, 97widoków, 314

IIB, Interface Builder, 36identyfikator aplikacji, 56, 68, 201ikona, 69implementacja

metody, 93przekazywania wiadomości, 155

indeks sekcji, 573informacje o

komputerze, 681obiekcie, 269położeniu, 660rozdzielczości ekranu, 667stanie, 421urządzeniu, 646

inspektoratrybutów, 171tożsamości, 238wielkości, 261

interakcja dotknięć, 441Interface Builder, 72interfejs

hybrydowy, 256użytkownika, 172, 219, 235

iOS Developer Program, 54iOS Developer University

Program, 24iOS SDK, 24IPTC, 376

Jjęzyk Objective-C, 85

Kkamera, 42karta Info, 202katalog, 67

Applications, 176Application Support, 73Backup, 176DerivedData, 176Documents, 73, 153, 354Library, 73, 354, 424lproj, 84Preferences, 72Provisioning Profiles, 176Screenshots, 176Snapshots, 176Software Images, 176tmp, 354

kategorie, 137kąt względny urządzenia, 652klasa, 86, 97

AccelerometerHelper, 665AVAudioPlayer, 637BigTextView, 544BookController, 289CIImage, 374DetailViewController, 301DownloadHelper, 695DragView, 424GKPeerPickerController, 229MergedTableController, 78MPMediaPickerController, 229NSBundle, 153NSCoder, 424NSEr, 124NSFileManager, 153, 671NSJSONSerialization, 714NSMutableArray, 92NSMutableString, 146NSNotificationCenter, 80NSNumber, 147NSOperation, 706NSOperationQueue, 684, 706

Page 52: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

720 Skorowidz

NSRegularExpression, 516NSXMLParser, 707UIActionSheet, 221UIActivityIndicatorView, 622UIAlertView, 221UIApplication, 136UIBarButtonItem, 79UIControl, 79, 449UIDatePicker, 592UIDevice, 136, 509, 649UIDocumentInteraction

Controller, 229UIGestureRecognizes, 439UIImage, 353UIImagePicker, 228UIImagePickerController, 355,

365UILayoutContainerView, 313UINavigationController, 225,

271, 311UINavigationItem, 274UIPageControl, 223, 479UIPageViewController, 285UIPickerView, 223UIPopoverController, 77UIProgressView, 622UIResponder, 405UIScreen, 234, 666UISegmentedControl, 466UISlider, 222, 461UISplitViewController, 77, 272UIStepper, 472UISwitch, 222UITabBarController, 226, 292UITableView, 77UITableViewController, 548UITextChecker, 517UITextView, 75, 220UIView, 66, 219, 317, 349UIViewController, 63, 76, 225UIWebView, 220, 400UIWindow, 219XMLParser, 707

klasyFoundation, 142widoku, 76

klawiatura, 233, 252, 493

klawiatura sprzętowa, 497klient ekranu zewnętrznego, 668klucz

CFBundleIconFiles, 71ścieżki sekcji, 605UIApplicationLaunchOptions

URLKey, 352UIFileSharingEnabled, 73UIInterfaceOrientation, 259UIPrerenderedIcon, 71UIRequiredDeviceCapabilities,

644kod

konwertera, 253niezgodny z ARC, 131

kody języków, 517kolejki, 684kolekcje, 149

zapis do pliku, 152zrządzanie pamięcią, 151

kolorkomórki, 552tabeli, 555tła tabeli, 553

komórki, 549, 560kompensacja overscanningu, 668kompilacja, 204kompilator

LLVM 3.0, 128Xcode, 59

komponenty aplikacji, 67komunikat, 617

bez przycisków, 623dźwiękowy, 636, 638modalny, 625

konsola, 188, 199kontekst rastrowy, 389kontroler, 75

BookController, 289DetailViewController, 301GKPeerPickerController, 229MergedTableController, 78MPMediaPickerController, 229PasswordController, 702Root View Controller, 236UIImagePickerController, 355,

365

UILayoutContainerView, 313UINavigationController, 76,

225, 271, 311UIPageViewController, 285UISplitViewController, 77, 272UITabBarController, 76, 226,

292UITableViewController, 548

kontroleryksiążki adresowej, 228modalne, 275, 283nawigacyjne, 236, 272, 281opcji wyszukiwania, 575paska kart, 293tworzenia wiadomości, 369typu Popover, 227widoku, 65, 77, 171, 224, 241

głównego, 301podzielonego, 226, 299strony, 227, 285tabeli, 227

kontrolka, 222, 449koloru, 468segmentowana, 277, 466suwaka, 475UIDatePicker, 592UIPageControl, 479UIPickerView, 588, 595UITextField, 489wskaźnika strony, 478

kontrolki Picker, 223, 233konwersja

na CF, 135na HSB, 394plików, 181

konwerter temperatur, 247, 253kopiowanie obiektów, 269kropka, 105krzywe Catmull-Rom, 433KVC, Key-Value Coding, 111KVO, Key-Value Observing, 81kwalifikator

__autoreleasing, 124__block, 120, 127__strong, 124__unsafe_unretained, 124__weak, 124

Page 53: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz 721

kwalifikatoryARC, 110MRR, 110niepodzielności, 111właściwości, 110

Lleniwe wczytywanie, 108licencja programisty, 197liczby, 147licznik

czasu, 148, 655NSTimer, 381odniesień, 125użycia, 90, 100, 132

liniesprings, 261struts, 261

listaakcji, 210Devices, 197zainstalowanych aplikacji, 199

lokalizacja, 43

Łłączenie przycisków z akcjami, 455

Mmagazyn danych, 510mapowanie współrzędnych, 382mechanizm

cel-akcja, 79delegowania, 77, 574KVO, 81usuwania nieużytków, 114zarządzania pamięcią, 276

menedżeroperacji cofnięcia, 430plików, 153

menu, 629Deployment Target, 204Scheme, 209

metadane, 215

metoddeklarowanie, 93dziedziczenie, 93implementacja, 93nadpisywanie, 98ukrywanie, 208

metodaaboveSubview, 317accelerometer:didAccelerate:,

650alertView:clickedButtonAtIndex:,

619allAplicationSubviews(), 317alloc, 89allSubviews(), 316application:didFinish

LaunchingwithOptions:, 63application:didFinish

LaunchingWithOptions:, 352applicationDidBecomeActive:,

63applicationDidFinishLaunching:,

430applicationDidReceiveMemory

Warning:, 63applicationWillEnter

Foreground:, 63applicationWillEnter

Background:, 63applicationWillResignActive:,

63arrayWithObjects:, 106belowSubview, 317CFRunLoop(), 626checkUndoAndUpdateNavBar:,

429convert:, 251dealloc, 116dequeueReusableCell

WithIdentifier:, 552didAddSubview:, 318didMoveToSuperview:, 318didMoveToWindow:, 318didRotateFromInterface

Orientation:, 264done:, 283

download:withTargetPath:withDelegate:, 696

drawRect:, 431, 525forwardInvocation:, 155getIPAddressForHost:, 683helloController, 179hostAvailable:, 685hostname, 683imageWithBits:withSize, 391imageWithContentsOfFile:, 353isCameraDeviceAvailable:, 365isDescendantOfView:, 317isKindOfClass:, 156isValidJSONObject, 714keyboardDidShow:, 500leaveEditMode, 567loadView, 65localIPAddress, 683numberOfComponentsIn

PickerView, 586numberOfSectionsInTable

View, 552, 572pathToView(), 317performFetch, 609pickerView:didSelectRow:in

Component, 586pickerView:numberOfRowsIn

Component:, 586pickerView:rowHeightFor

Component:, 588pickerView:titleForRow:for

Component, 586pushViewController:animated:,

280release, 101respondsToSelector:, 156say:, 629scanString:, 530scrollViewDidEndDecelerating:

, 583scrollViewDidScroll:, 583searchBar:textDidChange:, 609segmentAction:, 278setAnimationDelegate:, 339setDelegate:, 78setFontFace:, 79setNeedsDisplay, 431

Page 54: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

722 Skorowidz

metodasetObject:forKey:, 297setPosition:, 430shouldAutorotateToInterfaceO

rientation:, 65, 258storyboardWithName:bundle:,

256stringWithFormat:, 107subviews, 316tableView:tableView:cellForRowAtIndex

Path:, 552tableView:didSelectRow

AtIndexPath:, 78tableView:numberOfRowsIn

Section, 572tableView:numberOfRowsIn

Section:, 552takePicture, 370textFieldShouldReturn:, 490updateTransformWithOffset:,

414useSideBySide:, 290viewDidAppear:, 65viewDidLoad, 65, 325viewWillAppear:, 65viewWithTag:, 320whatismyipdotcom, 683willMoveToSuperview:, 318willMoveToWindow:, 318willRemoveSubview, 318

metodyakcesorów, 104, 106, 108delegata, 63, 578dla podwidoków, 316inicjalizacyjne, 88klasy, 95klasy UIImage, 353narzędziowe, 331niezadeklarowane, 91obsługi dotknięć, 407publiczne, 104typu getter, 106typu setter, 106wygodne, 102wywoływane przez przyciski,

243

źródła danych, 82, 584miejsce dotknięcia, 417, 419migracja do ARC, 128modalny kontroler widoku, 281model MVC, 406modele, 75, 82, 598moduł Interface Builder, 248, 268modyfikacja kontrolera widoku, 302monitorowanie zmian w

połączeniu, 679możliwości urządzenia, 645MRC, Manual Reference

Counting, 89MRR, Manual Retain Release, 88,

101, 106, 112MVC, Model-View-Controller, 74,

406

Nnadpisywanie metod, 98nagłówek sekcji, 573nakładki, 371narzędzie

Instruments, 190, 191Interface Builder, 72sqlite3, 602

nasłuchiwanie powiadomień, 80nawias kwadratowy, 91nawigacja pomiędzy kontrolerami,

279nazwy widoków, 321niepodzielność, 110numer UDID, 56

Oobiekt, 86

DisplayLink, 668, 671JSON, 714NSData, 153NSString, 143NSURL, 152NSURLResponse, 690ObjectCache, 193UIAlertView, 617UIApplication, 83

UIImage, 366UIPickerView, 585UISwitch, 471UITableView, 562

obiektyCore Foundation, 132powiązane, 321

obracające się kółko, 621obrazy, 351

rastrowe, 387rozruchowe, 69

obrótinterfejsu, 258urządzenia, 656widoku, 343

obsługaaparatu, 379bloku, 657dotknięć, 405iPada, 358klawiatury, 505okna Popover, 245opcji cofnij, 425plików, 711poczty, 367połączeń HSDPA, 52proxy wyglądu, 466układu tabeli, 548wibracji, 638wielu dotknięć, 408, 441

oczyszczaniepamięci, 53projektu, 208

odbicie, 347odtwarzanie dźwięków, 638ograniczenia

aplikacji, 51dostępu do danych, 45energetyczne, 50interakcji, 50pamięci, 46platformy, 45przestrzeni na dane, 45ruchu, 415SDK, 52symulatora, 38

Page 55: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz 723

oknoedytora, 168Interface Builder, 170Organizer, 196typu Popover, 244, 633

opakowanie implementacji, 286opcja cofnij, 425OpenGL ES, 44operator kolekcji, 111opóźnienia, 639organizacja widoków, 238orientacja urządzenia, 259, 653osadzanie obrazu, 401

Ppaczka aplikacji, application

bundle, 351pakiet

Cocoa Touch, 37DTrace, 36SKD iOS, 37

pamięć, 46, 88, 193panel

Debug Navigator, 188dzienników zdarzeń, 167inspektora, 166nawigacyjny, 166problemów, 167punktów kontrolnych, 167symboli, 166usuwania błędów, 167, 185Utilities, 239wyszukiwania, 166

panele narzędziowe, 167para klucz-wartość, 81pasek

kart, 223, 232, 292narzędziowy, 484, 487nawigacyjny, 223, 232, 239postępu, 224, 621stanu, 230wyszukiwania, 575, 576

pęk kluczy, 702piaskownica aplikacji, sandbox, 74,

176, 351plakietki, 636

platformaCocoa, 25Mac, 27

plikAppDelegate.h, 169AppDelegate.m, 169Default.png, 69Hello_WorldViewController.h,

245HelloWorldViewController.xib,

182Info.plist, 68, 84, 169main.c, 178main.m, 30, 61, 169MainStoryboard_iPad.

storyboard, 169, 244MainStoryboard_iPhone.

storyboard, 169, 248manifestu, 213ViewController.h, 169ViewController.m, 169

pliki.h, 30.ipa, 73.m, 30.storyboard, 61, 72, 170, 235.xcdatamodel, 598.xib, 72, 256AppDelegate, 255dzienników, 198graficzne, 69implementacji, 61interfejsu, 60kodu źródłowego, 60modelu, 598PNG, 46wykonywalne, 67

pływający wskaźnik postępu, 625pobieranie asynchroniczne, 690, 691pobieranie

danych, 692obrazu, 360synchroniczne, 687

podgląd, 375podłączanie urządzeń, 40podpisywanie aplikacji, 205podział na strony, 531

pole magnetyczne, 657pole tekstowe, 233polecenie backtrace, 188połączenie sieciowe, 676położenie urządzenia, 656portal akredytacyjny, 53poruszanie obiektami, 653potrząsanie urządzeniem, 429powiadomienia, notifications,

80, 493powiadomienia lokalne, 635poziom

głośności, 640naładowania baterii, 647

predykaty, 616prefiks set, 106procedura rozpoznawania gestów,

439procesor, 44profil akredytacyjny programisty,

200program

Developer Enterprise Program,35

Developer University Program,35

Instruments, 36Interface Builder, 36Online Developer Program, 33Shark, 37Simulator, 36Standard Developer Program, 34Xcode, 25, 36, 59

programowanie zorientowaneobiektowo, 74

protokół, 138delegata, 78NSURLConnectionDownload

Delegate, 691UIKeyInput, 506UITextInputTraits, 491

proxy wyglądu, 465przechowywanie danych, 698przeciąganie z widoku, 444przejście pomiędzy

kontrolerami widoków, 308klawiaturami, 498

Page 56: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

724 Skorowidz

przejście segue, 304przekazywanie

danych do serwera, 703wiadomości, 154, 157zdarzeń, 471

przekształcanie widoku, 336przekształcenia 3D, 327przełączanie pomiędzy aparatami,

375przełączniki, 471przenoszenie

danych, 616obiektów, 269widoków, 264, 335

przestrzeń robocza, 162przesuwanie widoku, 411przetwarzanie

obrazów, 388–391tekstu, 527

przewijaniemenu, 631stron, 291, 480

przezroczystość, 337przezroczystość widoku, 341przycisk

Add Contact, 452Debugger, 184Detail Disclosure, 452Info Dark, 452Info Light, 452Organizer, 165Rounded Rect, 452wstecz, 281

przyciski typu disclosure, 303, 562przypisywanie właściwości, 110przyśpieszenie, 657przyśpieszeniomierz, 649, 653przytrzymywanie obiektu, 103pula zwalniana automatycznie, 62,

101, 127punkt kontrolny, 184, 187punkt środkowy, 330

QQuartz Core, 371

Rramki, 326refaktoring kodu, 130reguły dotyczące ARC, 131rejestracja, 35rejestrowanie

identyfikatorów aplikacji, 56urządzeń, 55

repozytoria git, 31rodzaje

gestów, 408komunikatów, 620kontrolek, 449powiadomień, 80przytrzymania, 110

rozdzielczość ekranu, 229, 328, 667rozmiar ramki, 329rozpoznawanie gestów, 408, 412, 439rozszerzenia klas, 137rysowanie

płynne, 432po ekranie, 431w PDF, 398

rzutowaniebridge_transfer, 133obiektów, 320typów, 115, 132

Sschematy, 209SDK, software development kit, 33SDK iOS, 36sekcje, 571selektory, 87serializacja JSON, 714serwis Provisioning Portal, 53sieć Wi-Fi, 675silne wiązanie, 125skalowanie obrazu, 330składnia metody, 91słownik modyfikowalny, 297słowniki, 150słowo kluczowe, 87

@optional, 140@required, 140

sortowanie tabeli, 569specyfikatory formatu, 99sprawdzanie

dostępności, 677aparatów, 372zasobu, 685

połączenia sieciowego, 676zgodności, 205

stankomórki, 557kontrolki, 558paska kart, 295połączenia z siecią, 675przycisku, 454urządzenia, 197

standard 802.11n, 52standardy metadanych, 376status First Responder, 430steppery, 471strona przewijana, 402struktura CGRect, 330styl modalny, 240suwak, 291, 461suwak z gwiazdkami, 473symbol @, 87symulator, 38, 173, 175szablony aplikacji, 159szybkie wyliczenie, 96

Śścieżka dostępu do pliku, 153śledzenie

Core Location, 361dotknięć, 431, 443, 470komunikatów, 83wsteczne, 188

Ttabela, 547, 551

ustawień, 583zgrupowana, 583

tablica, 149kontrolerów, 297, 304subviews, 315

Page 57: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz 725

tablicekonwersja na tekst, 150sprawdzanie, 150

tarcza dotykowa, 476technologia

AirPlay, 220, 673ARC, 104, 121, 126, 135Core Animation, 343Core Motion, 656Core Text, 532MRR, 106, 112Quartz, 127

tekst, 489tekst przycisku, 458telefonia, 43testowanie

aplikacji, 174, 359miejsca dotknięcia, 417

tożsamość profilu, 203tworzenie

adresu URL, 152animacji, 338, 340aplikacji, 115, 161ciągu tekstowego, 142, 522drzewa przetwarzania, 707dynamicznej gałki suwaka, 462egzemplarza

UIAlertView, 628UIControl, 470UIDatePicker, 592UIPickerView, 586

indeksu sekcji, 573interfejsu, 235kategorii, 137komórki, 554komunikatu, 617, 628komunikatu dźwiękowego, 638kontekstu Core Data, 600kontrolek, 449kontrolera

danych wejściowych, 507paska kart, 293widoku podzielonego, 298

kontrolki koloru, 468kontrolki segmentowanej, 466konwertera temperatury, 247menedżera nazw, 323

menedżera opcji cofnij, 425menu, 276metod typu getter i setter, 108metod źródła danych, 576miniatur, 395nagłówka sekcji, 573nowego obrazu, 399nowego projektu, 159, 162, 236obiektów, 88, 100, 113obiektu JSON, 714odbicia widoku, 347opakowania, 286outletu, 251pakietu, 212paska narzędziowego, 484pliku manifestu, 213pływającego wskaźnika

postępu, 625połączeń, 245pól tekstowych, 501przejścia, 306przewijanej strony, 402przycisków, 253, 454sekcji, 571serwera, 711sesji aparatu, 373słownika, 150suwaka z gwiazdkami, 472tabeli, 78, 548, 551

z sekcjami, 606zgrupowanej, 557

tablicy, 149tekstu z atrybutami, 526wiadomości, 368wiadomości e-mail, 228widoków tabel, 547widoków tekstowych, 503widoku komunikatu, 631właściwości, 107wygładzonych krzywych, 433wyrażeń, 514

typ unichar, 143typy

komórek, 553zdarzeń, 451zmiennych, 120

tytuły indeksu, 606

Uuaktualnienie klas, 238układ

Core Text, 531obrazu, 378urządzenia, 377

ukrywanie kodu, 208uruchamianie aplikacji, 173, 243urządzenia, 37, 47, 174

podłączanie, 40rejestrowanie, 55zestawienie, 47

usługa iCloud, 351usuwanie

błędów, 183komórek, 567komunikatu, 623, 632kontrolera, 273kontrolera modalnego, 283kwalifikatorów, 124obiektów, 114, 604podwidoków, 318stron, 480widoków, 242zaznaczenia komórki, 557

UTI, Uniform Type Identifier, 352uwierzytelnienie, 697uwierzytelnienie trwałe, 700użycie predykatów, 608

VVIDEOkit, 668

Wwartości boolowskie, 560wartość

nil, 106, 573tag, 257, 319

wczytywanie obrazu, 355wiadomość

description, 99release, 101, 116

wibracje, 44, 638

Page 58: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

726 Skorowidz

widok, 75, 238Core Animation, 343geometria, 326hierarchia, 314nazwy, 321obrót, 343przekształcenia, 336przenoszenie, 334przesuwanie, 411wartości tag, 321wyszukiwanie, 319wywołania zwrotne, 318zamiana, 342zmiany przezroczystości, 341

widokidanych wejściowych, 500, 504,

507modalne, 282podzielone, 298przewijane, 400, 445tekstu, 494

właściwości, 104assign, 110klasy UIDevice, 643komunikatu, 620książki, 285pól tekstowych, 491widoku, 326

właściwośćalpha, 337batteryMonitoringEnabled, 648cameraDevice, 365cameraViewTransform, 371countDownDuration, 592date, 592delegate, 490font, 521inputView, 501orientation, 652popoverController, 246sectionIndexTitles, 606setUserInteractionEnabled, 409strong, 122tableFooterView, 579tableHeaderView, 579titleLabel, 458unsafe_unretained, 110

urlconnection, 696urlString, 695userInteractionEnabled, 337weak, 110, 122

wprowadzanie danych, 500wskaźnik

aktywności sieciowej, 685do obiektu, 92, 124do rzeczywistych danych, 153komunikatu, 636strony, 478

współczynnik kompresji, 366współrzędne widoku, 328wstrząsanie urządzeniem, 661wybór

elementów, 562obrazu, 357

wyciek pamięci, 190wyjście wideo, 667wykonywanie zdjęć, 363, 371wykrywanie

danych, 516ekranu, 667krawędzi, 387okręgów, 435połączeń, 676twarzy, 381–386

wyłączanie ARC, 129wyrażenia regularne, 514wyrażenie

device, 202signing, 202

WYSIWYG, 265wysyłanie

obrazów, 367wiadomości, 88, 91

wyszukiwaniebłędnie zapisanych słów, 517ciągów tekstowych, 518obrazów, 351, 354w tabeli, 575, 608widoków, 319

wyświetlacz, 337wyświetlanie

danych, 220informacji, 98kluczy, 151

komunikatu, 620kontrolek, 279, 567liter, 542menu, 629obrazu, 400tekstu, 631

na ścieżce, 536na ścieżkach Béziera, 541proporcjonalne, 541w okręgu, 533

widoku modalnego, 281wywołania zwrotne, 139

opcjonalne, 140widoku, 318

wzorce, 514wzorzec

MVC, 75Singleton, 136, 153

XXcode, 25, 162XMP, 376

Zzamiana widoków, 342zapytania do

bazy danych, 603podwidoków, 315

zarządzaniepamięcią, 100, 121, 151, 189plikiem, 153podwidokami, 317

zaznaczanie kolumn, 587zbiory, 151zbliżenie, 44zdarzenia

kontrolek, 450przyśpieszeniomierza, 650ruchu, 661typu Touch Up, 471

zdjęcia, 363zgłoszenie aplikacji, 215zgodność

z ARC, 130z protokołem, 141

Page 59: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

Skorowidz 727

zmianakolejności komórek, 568odcienia obrazu, 461orientacji, 249, 258poziomu głośności, 640wielkości automatyczna, 261wielkości widoku, 497

zmiennaerror, 125strong, 127

zmienneklasy, 104lokalne, 120

znacznikiHTML, 527pragma mark, 207

znak tyldy (~), 154zrzut ekranu, 199, 397zwalnianie pamięci, 89, 115

zwrotkomórek, 572liczby rekordów, 576

Źźródło danych, 82

Page 60: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204

728 Skorowidz

Page 62: Tytuł oryginału: The iOS 5 Developer's Cookbook · Spis treci 11 Okrelenie bazowej wersji SDK dla aplikacji .....203 Kompilacja i uruchomienie aplikacji Hello World .....204