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ść
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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).
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.
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];}
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:
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.
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];
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)];}
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.
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.
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;
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]; }
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.
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ę.
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.
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);
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
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.
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.
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];}
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;}
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)
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
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.
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.
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;
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");
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;}
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.
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.
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.
674 Rozdzia� 14. Mo�liwo�ci urz�dzenia
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
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
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
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
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
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
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
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
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
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
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
728 Skorowidz
Top Related