Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00263 006202 13651442 na godz. na dobę w sumie
iOS. Tajniki SDK. Biblioteka przydatnych narzędzi - ebook/pdf
iOS. Tajniki SDK. Biblioteka przydatnych narzędzi - ebook/pdf
Autor: , Liczba stron: 544
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-9185-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> systemy operacyjne >> inne
Porównaj ceny (książka, ebook (-20%), audiobook).

Poznaj zaawansowane możliwości platformy iOS!

Systemy spod znaku jabłka od zawsze wyznaczały trendy w wyglądzie interfejsu użytkownika. Nie inaczej jest w przypadku urządzeń mobilnych. Platforma iOS zdobyła uznanie użytkowników dzięki niezwykłej wygodzie użytkowania, atrakcyjnemu wyglądowi oraz ogromnym możliwościom. Jeżeli chcesz stworzyć aplikację, w której wykorzystasz zaawansowane narzędzia i mechanizmy SDK, to trafiłeś na doskonałą publikację!

W trakcie lektury będziesz mieć niepowtarzalną okazję poznania systemu iOS od podszewki — wraz z jego licznymi bibliotekami, ułatwiającymi pracę programistom. Jaką wiedzę zdobędziesz dzięki tej książce? Nauczysz się tworzyć animacje z wykorzystaniem UIKit Dynamics oraz stosować biblioteki Core Location, MapKit i Geofencing. Ponadto dowiesz się, do czego służą Game Center oraz iCloud. W kolejnych rozdziałach znajdziesz informacje poświęcone komunikacji między systemami za pośrednictwem formatu JSON, lokalnym repozytoriom danych oraz zaawansowanym operacjom na tekście przy użyciu biblioteki TextKit. Dodatkowo poznasz tajniki SDK i sprytne techniki pracy z IDE. To obowiązkowa lektura każdego programisty platformy iOS!

Dzięki tej książce:

iOS dla ambitnych!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: iOS Components and Frameworks: Understanding the Advanced Features of the iOS SDK Tłumaczenie: Krzysztof Rychlicki-Kicior ISBN: 978-83-246-9182-1 Authorized translation from the English language edition, entitled: IOS COMPONENTS AND FRAMEWORKS: UNDERSTANDING THE ADVANCED FEATURES OF THE IOS SDK; ISBN 0321856716; by Kyle Richter; and by Joe Keeley; published by Pearson Education, Inc, publishing as Addison Wesley. Copyright © 2014 Pearson Education, Inc. All rights reserved. No part of this book may by reproduced or 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 © 2014. 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. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i 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 HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: 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/iostaj.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/iostaj Moż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 S(cid:228)owo wst(cid:246)pne ..................................................................17 Przedmowa ........................................................................19 O autorach ........................................................................27 Rozdzia(cid:228) 1. UIKit Dynamics ..................................................................29 Przyk(cid:228)adowa aplikacja ....................................................................29 Wprowadzenie do UIKit Dynamics ...................................................30 Implementacja mechanizmów UIKit Dynamics .................................31 Grawitacja ...............................................................................32 Kolizje .....................................................................................33 Powi(cid:241)zania ..............................................................................35 Spr(cid:246)(cid:276)ynowanie ........................................................................36 Przyci(cid:241)ganie ............................................................................37 Si(cid:228)y odpychania .......................................................................37 W(cid:228)a(cid:264)ciwo(cid:264)ci elementu ..............................................................39 UIDynamicAnimator i UIDynamicAnimatorDelegate pod lup(cid:241) .............41 Podsumowanie .............................................................................41 (cid:231)wiczenia .....................................................................................42 Rozdzia(cid:228) 2. Core Location, MapKit i wirtualne granice ..........................43 Przyk(cid:228)adowa aplikacja ....................................................................43 Uzyskiwanie po(cid:228)o(cid:276)enia u(cid:276)ytkownika ................................................44 Wymagania i uprawnienia .........................................................44 Sprawdzanie dost(cid:246)pno(cid:264)ci us(cid:228)ug ................................................48 Rozpocz(cid:246)cie pobierania informacji o po(cid:228)o(cid:276)eniu ...........................48 Parsowanie i interpretacja danych po(cid:228)o(cid:276)enia ..............................50 Powiadomienia o istotnych zmianach .........................................52 Stosowanie plików GPX do testowania lokalizacji ........................52 Wy(cid:264)wietlanie map .........................................................................53 Uk(cid:228)ady wspó(cid:228)rz(cid:246)dnych ..............................................................53 Konfiguracja MKMapKit ............................................................54 Reagowanie na zachowania u(cid:276)ytkownika ....................................56 Kup książkęPoleć książkę 6 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Adnotacje i warstwy .......................................................................56 Dodawanie adnotacji ................................................................57 Wy(cid:264)wietlanie standardowych i specyficznych widoków adnotacji ...59 Przeci(cid:241)galne widoki adnotacji ....................................................62 Praca z warstwami mapy ..........................................................63 Geokodowanie i odwrotne geokodowanie ........................................65 Geokodowanie adresu ..............................................................65 Odwrotne geokodowanie po(cid:228)o(cid:276)enia ............................................68 Wirtualne granice ..........................................................................71 Weryfikacja mo(cid:276)liwo(cid:264)ci w zakresie monitorowania obszaru ..........71 Okre(cid:264)lanie granic .....................................................................72 Monitorowanie zmian ...............................................................72 Wyznaczanie tras ..........................................................................74 Podsumowanie .............................................................................79 (cid:231)wiczenia .....................................................................................79 Rozdzia(cid:228) 3. Tablice wyników ................................................................81 Uderz kaktus ................................................................................81 Wy(cid:264)wietlanie kaktusa ...............................................................83 Interakcja z kaktusami .............................................................85 Wy(cid:264)wietlanie liczby (cid:276)y(cid:232) i wyniku .................................................87 Wstrzymywanie i wznawianie .....................................................89 Uwagi ko(cid:254)cowe ........................................................................90 iTunes Connect .............................................................................90 Mened(cid:276)er Game Center .................................................................94 Uwierzytelnianie ............................................................................95 Typowe b(cid:228)(cid:246)dy zwi(cid:241)zane z uwierzytelnianiem ................................96 Uwierzytelnianie w iOS 6 ..........................................................97 Wysy(cid:228)anie wyników ........................................................................99 Dodawanie wyników do gry Whack-a-Cac ..................................102 Wy(cid:264)wietlanie list wyników .......................................................104 Wyzwania ..............................................................................106 Co dalej z tablicami wyników? .................................................108 Podsumowanie ...........................................................................109 (cid:231)wiczenia ...................................................................................109 Rozdzia(cid:228) 4. Osi(cid:241)gni(cid:246)cia ......................................................................111 iTunes Connect ...........................................................................111 Wy(cid:264)wietlanie informacji o osi(cid:241)gni(cid:246)ciach ........................................114 Mened(cid:276)er Game Center i uwierzytelnianie .....................................115 Pami(cid:246)(cid:232) podr(cid:246)czna osi(cid:241)gni(cid:246)(cid:232) ........................................................115 Zg(cid:228)aszanie osi(cid:241)gni(cid:246)(cid:232) ...................................................................117 Dodawanie haków osi(cid:241)gni(cid:246)(cid:232) ........................................................119 Banery z powiadomieniami ...........................................................120 Kup książkęPoleć książkę Spis tre(cid:264)ci 7 Wyzwania ...................................................................................120 Dodawanie osi(cid:241)gni(cid:246)(cid:232) do gry .........................................................123 Uko(cid:254)czone i nieuko(cid:254)czone osi(cid:241)gni(cid:246)cia ....................................124 Osi(cid:241)gni(cid:246)cia cz(cid:246)(cid:264)ciowe ...........................................................125 Osi(cid:241)gni(cid:246)cia zdobywane na przestrzeni wielu sesji .....................127 Grupowanie osi(cid:241)gni(cid:246)(cid:232) i przechowywanie ich dok(cid:228)adno(cid:264)ci ..........127 Osi(cid:241)gni(cid:246)cia z wykorzystaniem zegarów ....................................128 Resetowanie osi(cid:241)gni(cid:246)(cid:232) ................................................................129 Co jeszcze mo(cid:276)na osi(cid:241)gn(cid:241)(cid:232)? ........................................................130 Podsumowanie ...........................................................................132 (cid:231)wiczenia ...................................................................................132 Rozdzia(cid:228) 5. Ksi(cid:241)(cid:276)ka adresowa ............................................................133 Czemu obs(cid:228)uga ksi(cid:241)(cid:276)ki adresowej jest istotna? .............................133 Ograniczenia zwi(cid:241)zane ze stosowaniem ksi(cid:241)(cid:276)ki adresowej ..............134 Wprowadzenie do przyk(cid:228)adowej aplikacji ........................................134 Dodanie obs(cid:228)ugi ksi(cid:241)(cid:276)ki adresowej ...............................................135 Wczytywanie danych z ksi(cid:241)(cid:276)ki adresowej ..................................137 Odczytywanie wielowarto(cid:264)ci z ksi(cid:241)(cid:276)ki adresowej .......................139 Etykiety w ksi(cid:241)(cid:276)ce adresowej ..................................................139 Obs(cid:228)uga adresów ...................................................................140 Interfejs graficzny ksi(cid:241)(cid:276)ki adresowej .............................................141 Kontrolka wyboru kontaktów ...................................................142 Tworzenie kontaktów z poziomu kodu ...........................................147 Podsumowanie ...........................................................................148 (cid:231)wiczenia ...................................................................................149 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki ..................................................151 Wprowadzenie do przyk(cid:228)adowej aplikacji ........................................151 Tworzenie silnika odtwarzania ......................................................152 Rejestrowanie powiadomie(cid:254) odtwarzania .................................153 Kontrolki u(cid:276)ytkownika .............................................................154 Obs(cid:228)uga zmiany stanu ............................................................156 Czas trwania a zegary .............................................................160 Tryb losowy i powtarzanie .......................................................161 Media Picker — kontrolka wyboru multimediów .............................162 R(cid:246)czny wybór piosenek ................................................................164 Odtwarzanie losowo wybranej piosenki ....................................164 Wyszukiwanie piosenek w oparciu o predykaty .........................166 Podsumowanie ...........................................................................167 (cid:231)wiczenia ...................................................................................168 Rozdzia(cid:228) 7. Obs(cid:228)uga i parsowanie formatu JSON ..................................169 JSON .........................................................................................169 Korzy(cid:264)ci wynikaj(cid:241)ce ze stosowania formatu JSON .....................170 Zasoby JSON .........................................................................170 Kup książkęPoleć książkę 8 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Omówienie przyk(cid:228)adowej aplikacji .................................................170 Uzyskanie dost(cid:246)pu do serwera .....................................................171 Pobieranie danych w formacie JSON z serwera ..............................171 Tworzenie obiektu (cid:276)(cid:241)dania ......................................................171 Przetwarzanie odpowiedzi .......................................................172 Parsowanie danych w formacie JSON .......................................173 Wy(cid:264)wietlanie danych ..............................................................174 Wysy(cid:228)anie og(cid:228)oszenia ...................................................................175 Przekszta(cid:228)canie danych na format JSON ..................................176 Wysy(cid:228)anie dokumentu JSON do serwera ...................................178 Podsumowanie ...........................................................................179 (cid:231)wiczenie ...................................................................................179 Rozdzia(cid:228) 8. iCloud w praktyce ............................................................181 Przyk(cid:228)adowa aplikacja ..................................................................182 Konfiguracja aplikacji dla us(cid:228)ugi iCloud .........................................182 Konfiguracja konta .................................................................182 W(cid:228)(cid:241)czenie obs(cid:228)ugi iCloud ........................................................184 Inicjalizacja us(cid:228)ugi iCloud ........................................................184 Wprowadzamy klas(cid:246) UIDocument .................................................185 Tworzenie podklas klasy UIDocument ......................................186 Interakcja z obiektem klasy UIDocument ..................................187 Interakcja z us(cid:228)ug(cid:241) iCloud ............................................................188 Wy(cid:264)wietlanie dokumentów w us(cid:228)udze iCloud ............................188 Wykrywanie konfliktów w us(cid:228)udze iCloud ..................................191 Rozwi(cid:241)zywanie konfliktów ............................................................193 Synchronizacja s(cid:228)owników ............................................................197 Podsumowanie ...........................................................................199 (cid:231)wiczenia ...................................................................................199 Rozdzia(cid:228) 9. Powiadomienia ................................................................201 Ró(cid:276)nice pomi(cid:246)dzy powiadomieniami lokalnymi i zdalnymi ...............201 Przyk(cid:228)adowa aplikacja ..................................................................202 Konfiguracja aplikacji ...................................................................203 Tworzenie programistycznego certyfikatu SSL dla zdalnych powiadomie(cid:254) ..........................................................206 Programistyczny profil po(cid:264)wiadcze(cid:254) ..............................................209 Przygotowanie w(cid:228)asnego d(cid:274)wi(cid:246)ku ..................................................213 Rejestrowanie aplikacji w celu otrzymywania zdalnych powiadomie(cid:254) ................................214 Planowanie powiadomie(cid:254) lokalnych ..............................................215 Otrzymywanie powiadomie(cid:254) .........................................................216 Serwer powiadomie(cid:254) zdalnych ......................................................217 Podstawowa konfiguracja Rails ....................................................218 Dodawanie obs(cid:228)ugi urz(cid:241)dze(cid:254) i wykrzyknie(cid:254) ....................................219 Kup książkęPoleć książkę Spis tre(cid:264)ci 9 Kontroler urz(cid:241)dze(cid:254) ......................................................................222 Kontroler wykrzyknie(cid:254) ..................................................................222 Po(cid:228)(cid:241)czenie aplikacji mobilnej i serwera .........................................223 Wysy(cid:228)anie zdalnych powiadomie(cid:254) .................................................226 Obs(cid:228)uga informacji zwrotnej od APNs ............................................227 Podsumowanie ...........................................................................227 (cid:231)wiczenie ...................................................................................227 Rozdzia(cid:228) 10. Bluetooth a Game Kit .......................................................229 Ograniczenia komunikacji sieciowej Bluetooth w Game Kit ..............229 Korzy(cid:264)ci ze stosowania Bluetooth w Game Kit ...............................230 Przyk(cid:228)adowa aplikacja ..................................................................230 Wybór partnera — kontrolka Peer Picker .......................................234 Wysy(cid:228)anie danych ........................................................................238 Tryby transferu danych ...........................................................238 Wysy(cid:228)anie danych w przyk(cid:228)adowej aplikacji ...............................239 Otrzymywanie danych ..................................................................240 Otrzymywanie danych w przyk(cid:228)adowej aplikacji ..........................240 Zmiany stanu ..............................................................................241 Zaawansowane funkcje ................................................................242 Wy(cid:264)wietlanie nazwy partnera ..................................................242 Nawi(cid:241)zywanie po(cid:228)(cid:241)czenia bez kontrolki Peer Picker ...................242 Tryby sesji .............................................................................244 Podsumowanie ...........................................................................244 (cid:231)wiczenia ...................................................................................244 Rozdzia(cid:228) 11. AirPrint ............................................................................245 Drukarki AirPrint ..........................................................................245 Testowanie technologii AirPrint .....................................................247 Drukowanie tekstu ......................................................................247 Informacje na temat drukowania .............................................248 Ustawienie zakresu stron .......................................................249 Obs(cid:228)uga b(cid:228)(cid:246)dów .....................................................................250 Rozpoczynamy drukowanie .....................................................250 Informacja zwrotna od symulatora drukowania ..........................251 Centrum drukowania (Print Center) ...............................................251 UIPrintInteractionControllerDelegate ........................................253 Drukowanie wyrenderowanego dokumentu HTML ...........................254 Drukowanie plików PDF ................................................................255 Podsumowanie ...........................................................................256 (cid:231)wiczenia ...................................................................................256 Kup książkęPoleć książkę 10 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Rozdzia(cid:228) 12. Wprowadzenie do Core Data .............................................257 Kiedy stosowa(cid:232) Core Data? .........................................................258 Obiekty zarz(cid:241)dzane Core Data ......................................................259 Obiekty zarz(cid:241)dzane ................................................................259 Model zarz(cid:241)dzanego obiektu ...................................................260 Migracje modeli zarz(cid:241)dzanych obiektów ...................................262 Tworzenie obiektów zarz(cid:241)dzanych ............................................263 Pobieranie i sortowanie obiektów ............................................263 Kontroler pobranych wyników ..................................................265 (cid:263)rodowisko Core Data .................................................................265 Koordynator trwa(cid:228)ego magazynu ..............................................265 Trwa(cid:228)y magazyn .....................................................................266 Kontekst obiektów zarz(cid:241)dzanych .............................................266 Podsumowanie ...........................................................................267 Rozdzia(cid:228) 13. Core Data w praktyce ......................................................269 Przyk(cid:228)adowa aplikacja ..................................................................269 Tworzenie projektu wykorzystuj(cid:241)cego Core Data ................................270 (cid:263)rodowisko Core Data ............................................................272 Tworzenie modelu obiektu zarz(cid:241)dzanego .......................................274 Tworzenie encji ......................................................................275 Dodawanie atrybutów .............................................................275 Definiowanie zwi(cid:241)zków ...........................................................276 W(cid:228)asne podklasy obiektów zarz(cid:241)dzanych ..................................277 Konfiguracja domy(cid:264)lnych danych ..................................................278 Wstawianie nowych obiektów zarz(cid:241)dzanych ..............................278 Inne sposoby konfiguracji domy(cid:264)lnych danych ..........................279 Wy(cid:264)wietlanie obiektów zarz(cid:241)dzanych .............................................280 Tworzenie w(cid:228)asnych (cid:276)(cid:241)da(cid:254) pobrania ........................................280 Pobieranie za pomoc(cid:241) identyfikatora obiektu ............................282 Wy(cid:264)wietlanie danych obiektu ..................................................283 Stosowanie predykatów ..........................................................284 Kontroler pobranych wyników .......................................................285 Przygotowanie kontrolera pobranych wyników ...........................287 Integracja widoku tabeli z kontrolerem pobranych wyników ........288 Reagowanie na zmiany w bibliotece Core Data .........................290 Dodawanie, edytowanie i usuwanie obiektów zarz(cid:241)dzanych ............293 Wstawianie nowego obiektu zarz(cid:241)dzanego ...............................293 Usuwanie obiektu zarz(cid:241)dzanego ..............................................294 Edycja istniej(cid:241)cego obiektu zarz(cid:241)dzanego ................................294 Zapisywanie i wycofywanie zmian ............................................295 Podsumowanie ...........................................................................296 (cid:231)wiczenia ...................................................................................297 Kup książkęPoleć książkę Spis tre(cid:264)ci 11 Rozdzia(cid:228) 14. Mechanizmy j(cid:246)zyka ..........................................................299 Litera(cid:228)y .......................................................................................300 NSNumber ............................................................................300 NSArray .................................................................................301 NSDictionary .........................................................................301 Opakowania ..........................................................................302 Automatyczne zliczanie referencji .................................................302 Stosowanie ARC w nowym projekcie ........................................303 Konwersja istniej(cid:241)cego projektu na ARC ..................................303 Jak stosowa(cid:232) ARC .................................................................305 Kwalifikatory ARC ...................................................................307 Bloki ..........................................................................................307 Deklarowanie i stosowanie bloków ..........................................308 Przechwytywanie stanu za pomoc(cid:241) bloków ...............................309 Bloki jako parametry metod ....................................................310 Pami(cid:246)(cid:232), w(cid:241)tki i bloki ..............................................................311 W(cid:228)a(cid:264)ciwo(cid:264)ci ................................................................................313 Deklarowanie w(cid:228)a(cid:264)ciwo(cid:264)ci ......................................................313 Syntetyzacja w(cid:228)a(cid:264)ciwo(cid:264)ci ........................................................315 Dost(cid:246)p do w(cid:228)a(cid:264)ciwo(cid:264)ci ...........................................................315 Notacja kropkowa ..................................................................315 Szybkie wyliczenia .......................................................................316 Podmiana metod .........................................................................317 Podsumowanie ...........................................................................319 (cid:231)wiczenia ...................................................................................320 Rozdzia(cid:228) 15. Integracja Twittera i Facebooka z wykorzystaniem frameworku spo(cid:228)eczno(cid:264)ciowego ............321 Integracja z us(cid:228)ugami spo(cid:228)eczno(cid:264)ciowymi ......................................321 Przyk(cid:228)adowa aplikacja ..................................................................322 Logowanie ..................................................................................323 Stosowanie klasy SLComposeViewController .................................324 Wysy(cid:228)anie wiadomo(cid:264)ci za pomoc(cid:241) w(cid:228)asnego interfejsu ...................326 Wysy(cid:228)anie komunikatów do serwisu Twitter ..............................327 Wysy(cid:228)anie wiadomo(cid:264)ci do Facebooka ......................................330 Tworzenie aplikacji do serwisu Facebook .................................330 Dost(cid:246)p do osi czasu u(cid:276)ytkownika .................................................336 Twitter ..................................................................................337 Facebook ..............................................................................341 Podsumowanie ...........................................................................345 (cid:231)wiczenia ...................................................................................345 Kup książkęPoleć książkę 12 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Rozdzia(cid:228) 16. Obs(cid:228)uga zada(cid:254) dzia(cid:228)aj(cid:241)cych w tle .....................................347 Przyk(cid:228)adowa aplikacja ..................................................................348 Sprawdzanie dost(cid:246)pno(cid:264)ci zada(cid:254) w tle ...........................................348 Ko(cid:254)czenie zadania dzia(cid:228)aj(cid:241)cego w tle ............................................349 Identyfikator zadania w tle ......................................................350 Metoda obs(cid:228)ugi wyga(cid:264)ni(cid:246)cia ...................................................350 Ko(cid:254)czenie zadania w tle .........................................................351 Implementacja aktywno(cid:264)ci wykonywanych w tle .............................352 Rodzaje aktywno(cid:264)ci wykonywanych w tle ..................................353 Odtwarzanie muzyki w tle ........................................................354 Podsumowanie ...........................................................................356 (cid:231)wiczenia ...................................................................................357 Rozdzia(cid:228) 17. Grand Central Dispatch a wydajno(cid:264)(cid:232) ................................359 Przyk(cid:228)adowa aplikacja ..................................................................359 Wprowadzenie do kolejek .............................................................361 Wykonywanie operacji w g(cid:228)ównym w(cid:241)tku .......................................361 Dzia(cid:228)anie w tle ............................................................................363 Uruchamianie kolejki operacji .......................................................365 Operacje wspó(cid:228)bie(cid:276)ne ............................................................366 Operacje szeregowe ...............................................................367 Anulowanie operacji ...............................................................369 W(cid:228)asne operacje ....................................................................369 Uruchamianie kolejki dyspozytora .................................................371 Wspó(cid:228)bie(cid:276)ne kolejki dyspozytora .............................................372 Szeregowe kolejki dyspozytora ................................................373 Podsumowanie ...........................................................................375 (cid:231)wiczenia ...................................................................................376 Rozdzia(cid:228) 18. Stosowanie p(cid:246)ków kluczy do zabezpieczania danych .........377 Wprowadzenie do przyk(cid:228)adowej aplikacji ........................................378 Konfiguracja i stosowanie p(cid:246)ku kluczy ..........................................378 Konfiguracja obiektu klasy KeychainItemWrapper .....................379 Przechowywanie i pobieranie PIN-u ..........................................380 Klucze atrybutów p(cid:246)ku kluczy ..................................................381 Zabezpieczanie s(cid:228)ownika ........................................................382 Resetowanie elementu p(cid:246)ku kluczy .........................................384 Wspó(cid:228)dzielenie p(cid:246)ku kluczy pomi(cid:246)dzy aplikacjami .....................384 Kody b(cid:228)(cid:246)dów p(cid:246)ków kluczy ......................................................385 Podsumowanie ...........................................................................386 (cid:231)wiczenia ...................................................................................386 Rozdzia(cid:228) 19. Operacje na filtrach i obrazkach .......................................387 Przyk(cid:228)adowa aplikacja ..................................................................387 Zasady obs(cid:228)ugi i wy(cid:264)wietlania obrazków ........................................388 Kup książkęPoleć książkę Spis tre(cid:264)ci 13 Tworzenie obiektu obrazka ......................................................388 Wy(cid:264)wietlanie obrazka .............................................................389 Stosowanie kontrolki Image Picker ..........................................391 Zmiana rozmiaru obrazka .......................................................394 Filtry biblioteki Core Image ...........................................................395 Kategorie filtrów a filtry ..........................................................395 Atrybuty filtra .........................................................................397 Inicjalizacja obrazka ...............................................................400 Renderowanie przefiltrowanego obrazka ..................................401 (cid:227)(cid:241)czenie filtrów ......................................................................401 Wykrywanie twarzy .......................................................................403 Konfiguracja detektora twarzy .................................................403 Przetwarzanie rysów twarzy .....................................................404 Podsumowanie ...........................................................................405 (cid:231)wiczenia ...................................................................................406 Rozdzia(cid:228) 20. Widoki kolekcji ................................................................407 Przyk(cid:228)adowa aplikacja ..................................................................407 Wprowadzamy widoki kolekcji .......................................................408 Konfigurowanie widoku kolekcji ...............................................408 Implementacja metod (cid:274)ród(cid:228)a danych dla widoku kolekcji ...........411 Implementacja metod delegacji widoku kolekcji ........................413 Dostosowywanie widoku kolekcji i uk(cid:228)adu przep(cid:228)ywu .......................415 Podstawowe modyfikacje ........................................................415 Widoki dekoracyjne ................................................................416 Tworzenie w(cid:228)asnych uk(cid:228)adów ........................................................420 Animacje widoku kolekcji .............................................................424 Zmiany uk(cid:228)adu widoku kolekcji ................................................424 Animacje uk(cid:228)adu widoku kolekcji .............................................426 Animacje zmiany widoku kolekcji .............................................427 Podsumowanie ...........................................................................428 (cid:231)wiczenia ...................................................................................428 Rozdzia(cid:228) 21. Wprowadzenie do TextKit .................................................429 Przyk(cid:228)adowa aplikacja ..................................................................430 Klasa NSLayoutManager ..............................................................430 NSTextStore ..........................................................................431 Dynamiczne wykrywanie hiper(cid:228)(cid:241)czy ...............................................433 Wykrywanie trafie(cid:254) ......................................................................434 (cid:263)cie(cid:276)ki wy(cid:228)(cid:241)czaj(cid:241)ce .....................................................................435 Pod(cid:264)wietlanie uzale(cid:276)nione od tre(cid:264)ci ..............................................436 Zmiana ustawie(cid:254) czcionki dla typów dynamicznych ........................441 Podsumowanie ...........................................................................442 (cid:231)wiczenia ...................................................................................442 Kup książkęPoleć książkę 14 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Rozdzia(cid:228) 22. Rozpoznawanie gestów ....................................................443 Rodzaje detektorów gestów ..........................................................443 Sposoby u(cid:276)ycia detektorów gestów ...............................................444 Wprowadzenie do przyk(cid:228)adowej aplikacji ........................................444 Detektor stukni(cid:246)(cid:232) ..................................................................445 Detektor szczypni(cid:246)(cid:232) ...............................................................446 Wiele detektorów w jednym widoku ...............................................448 Detektory gestów — z czym to si(cid:246) je .......................................450 Wiele detektorów w jednym widoku — reduks ..........................451 Wykrywanie nieudanych gestów ...............................................453 Tworzenie w(cid:228)asnych podklas UIGestureRecognizer .........................454 Podsumowanie ...........................................................................455 (cid:231)wiczenie ...................................................................................455 Rozdzia(cid:228) 23. Obs(cid:228)uga bibliotek zdj(cid:246)(cid:232) ....................................................457 Przyk(cid:228)adowa aplikacja ..................................................................457 Biblioteka zasobów .....................................................................458 Wyliczanie zasobów i grup zasobów ..............................................458 Uprawnienia ..........................................................................459 Grupy ....................................................................................460 Zbiory ...................................................................................464 Wy(cid:264)wietlanie zasobów .................................................................466 Zapisywanie na rolce aparatu .......................................................470 Obs(cid:228)uga strumienia zdj(cid:246)(cid:232) .............................................................472 Podsumowanie ...........................................................................474 (cid:231)wiczenia ...................................................................................474 Rozdzia(cid:228) 24. Passbook i PassKit ..........................................................475 Przyk(cid:228)adowa aplikacja ..................................................................476 Projektowanie kuponu .................................................................477 Rodzaje kuponów ...................................................................477 Bilet podró(cid:276)ny — uk(cid:228)ad ..........................................................478 Kupon zni(cid:276)kowy — uk(cid:228)ad ........................................................478 Wydarzenie — uk(cid:228)ad ..............................................................478 Kupon ogólny — uk(cid:228)ad ...........................................................479 Karta podarunkowa — uk(cid:228)ad ...................................................480 Wy(cid:264)wietlanie kuponu ..............................................................481 Tworzenie kuponu .......................................................................482 Identyfikacja kuponu ..............................................................484 Istotne informacje na temat kuponu ........................................484 Identyfikacja kodu kreskowego ................................................485 Informacje na temat wygl(cid:241)du kuponu .......................................486 Pola kuponu ..........................................................................486 Kup książkęPoleć książkę Spis tre(cid:264)ci 15 Podpisywanie i tworzenie paczki kuponu .......................................489 Tworzenie identyfikatora typu kuponu ......................................489 Tworzenie certyfikatu podpisywania kuponów ...........................491 Tworzenie manifestu ..............................................................495 Podpisywanie i tworzenie paczki dla kuponu .............................495 Testowanie kuponu ................................................................496 Interakcja z kuponami z poziomu aplikacji ................................497 Automatyczna aktualizacja kuponów .............................................506 Podsumowanie ...........................................................................507 (cid:231)wiczenia ...................................................................................507 Rozdzia(cid:228) 25. Debugowanie i narz(cid:246)dzia ..................................................509 Wprowadzenie do debugowania ....................................................509 Pierwszy b(cid:228)(cid:241)d w programie komputerowym ...............................510 Podstawy debugowania w Xcode .............................................510 Punkty przerwania .......................................................................512 Dostosowywanie punktów przerwania ......................................513 Punkty przerwania wyj(cid:241)tków i symboliczne punkty przerwania ....514 Zasi(cid:246)g punktu przerwania .......................................................514 Praca z debuggerem ....................................................................515 Dodatkowe narz(cid:246)dzia — instrumenty ............................................517 Interfejs instrumentów ...........................................................518 Odkrywamy instrumenty — profiler czasowy .............................520 Odkrywamy instrumenty — wycieki pami(cid:246)ci ..............................522 Co dalej z instrumentami? ......................................................525 Podsumowanie ...........................................................................526 (cid:231)wiczenia ...................................................................................526 Skorowidz.........................................................................527 Kup książkęPoleć książkę 16 iOS. Tajniki SDK. Biblioteka przydatnych narz(cid:246)dzi Kup książkęPoleć książkę 6 Obsługa bibliotek muzyki Gdy Steve Jobs po raz pierwszy pokazał światu iPhone’a na konwencji Macworld w 2007 roku, został on ochrzczony mianem połączenia telefonu, iPoda i rewolucyjnego komunikatora internetowego. Wiele lat później, po części dzięki ciężkiej pracy wielu programistów na całym świecie, iPhone stał się czymś więcej. Oryginalne przesłanie nie uległo jednak zmianie — iPhone cały czas pełni przede wszystkim funkcję telefonu, odtwarzacza muzyki i urządzenia do komunikacji w internecie. Użytkownicy nie dodali iPhone’a do kolekcji swoich urządzeń, które noszą każdego dnia — zastąpili swoje stare telefony i iPody jednym urządzeniem. Odtwarzanie muzyki stanowiło istotny aspekt iPhone’a od powstania pierwszych koncepcji tego urządzenia, czyli od 2004 roku. iPhone był zawsze traktowany jako rozszerzenie iPoda. Muzyka stała się również inspiracją do stworzenia iPoda, który okazał się jednym z największych sukcesów firmy Apple. Ludzie kochają muzykę, bo łączy ludzi i pozwala na pełne wyrażanie siebie. Choć wielu użytkowników iPhone’ów może nie traktować swoich urządzeń jako odtwarzaczy, większość z nich bez większego zastanowienia słucha na nich swoich ulubionych piosenek. W tym rozdziale nauczymy się korzystać z biblioteki muzyki użytkownika wewnątrz aplikacji iOS. Niezależnie od tego, czy chcesz stworzyć w pełni funkcjonalny odtwarzacz muzyki, czy też chcesz odtwarzać wybraną przez użytkownika muzykę w formie ścieżki dźwiękowej w grze, w tym rozdziale dowiesz się, jak to zrobić. Wprowadzenie do przyk(cid:228)adowej aplikacji Przykładowa aplikacja w tym rozdziale nosi nazwę Odtwarzacz (rysunek 6.1). Jest to w pełni funkcjonalny odtwarzacz muzyki na iPhone’a. Użytkownik może wybierać utwory do odtworzenia przy użyciu komponentu Media Picker, może także odtwarzać utwory losowo lub wybrać konkretnych artystów. Co więcej, użytkownik będzie w stanie wstrzymywać utwór i powracać do niego, przechodzić pomiędzy nimi oraz regulować głośność odtwarzania. Ponadto zostanie zaimplementowany licznik, a dwa dodatkowe przyciski pozwolą na trzydziestosekundowe przeskoki w odtwarzanym utworze. Kup książkęPoleć książkę 152 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki Rysunek 6.1. Pierwszy rzut oka na przyk(cid:228)adow(cid:241) aplikacj(cid:246) — w pe(cid:228)ni funkcjonalny odtwarzacz muzyki dzia(cid:228)aj(cid:241)cy na iPodzie Co więcej, aplikacja wyświetli okładkę dla aktualnie odtwarzanej ścieżki, jeśli jest ona dostępna. Emulator (symulator) systemu iOS dostarczony razem z Xcode nie zawiera aplikacji Muzyka. Nie możemy też przenieść plików muzycznych do jego systemu plików. Aplikacja zadziała tylko na urządzeniach. W momencie uruchomienia aplikacji w emulatorze zostanie wyświetlonych kilka błędów. 2013-03-02 16:04:13.392 player[80633:c07] MPMusicPlayer: Unable to launch iPod music (cid:180)player server: application not found 2013-03-02 16:04:13.893 player[80633:c07] MPMusicPlayer: Unable to launch iPod music (cid:180)player server: application not found 2013-03-02 16:04:14.395 player[80633:c07] MPMusicPlayer: Unable to launch iPod music (cid:180)player server: application not found Dowolna próba dostępu do biblioteki mediów spowoduje zawieszenie się symulatora z następującym komunikatem: *** Terminating app due to uncaught exception NSInternalInconsistencyException , (cid:180)reason: Unable to load iPodUI.framework Tworzenie silnika odtwarzania Zanim zaczniemy korzystać z jakichkolwiek danych audio, musimy zrozumieć, jakie kontrolki odtwarzania będą nam potrzebne. Odtworzenie muzyki z poziomu aplikacji Kup książkęPoleć książkę Tworzenie silnika odtwarzania 153 wymaga utworzenia nowej instancji klasy MPMusicPlayerController. Operację tę wykonujemy w pliku nagłówkowym ICFViewController.h — nowy obiekt nosi nazwę player. Klasa MPMusicPlayerController jest wykorzystywana w tym rozdziale do kontroli odtwarzania oraz do pobierania informacji o odtwarzanych elementach. @interface ICFViewController : UIViewController { MPMusicPlayerController *player; } @property (nonatomic, retain) MPMusicPlayerController *player; Wewnątrz metody viewDidLoad odtwarzacz typu MPMusicPlayerController można zainicjalizować, korzystając z jednej z metod klasy MPMusicPlayerController. Pierwszy wariant — applicationMusicPlayer — odtworzy muzykę wewnątrz aplikacji. Nie wpłynie on na stan iPoda, a odtwarzanie zakończy się w momencie zamknięcia aplikacji. Drugi wariant — metoda iPodMusicPlayer — pozwoli na kontrolę samego iPoda. Odtwarzacz powróci do miejsca, w którym użytkownik pozostawił odtwarzanie na iPodzie, i skorzysta z tej samej ścieżki. Odtwarzanie będzie kontynuowane nawet po przejściu aplikacji w tryb pracy w tle. Przykładowa aplikacja wykorzystuje metodę applicationMusicPlayer, ale można zmienić to wywołanie, nie wprowadzając dodatkowego kodu ani zachowania. - (void)viewDidLoad { [super viewDidLoad]; player = [MPMusicPlayerController applicationMusicPlayer]; } Rejestrowanie powiadomie(cid:254) odtwarzania Wydajne odtwarzanie muzyki wymaga znajomości stanów odtwarzacza. W związku z tym istnieje konieczność obserwacji trzech powiadomień. Są to powiadomienia o zmianie aktualnie odtwarzanego utworu, zmianie głośności i zmianie stanu odtwarzania. Stany te mogą być monitorowane dzięki zapisaniu się na wspomniane zdarzenia przy użyciu klasy NSNotificationCenter. Przykładowa aplikacja korzysta z użytecznej metody registerMediaPlayerNotifications, dzięki czemu kod aplikacji pozostaje prosty i czytelny. Po dodaniu nowych obserwatorów do klasy NSNotificationCenter należy wywołać metodę odtwarzacza beginGeneratingPlaybackNotifications. - (void)registerMediaPlayerNotifications { NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; [notificationCenter addObserver: self selector: @selector (nowPlayingItemChanged:) name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: player]; Kup książkęPoleć książkę 154 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki [notificationCenter addObserver: self selector: @selector (playbackStateChanged:) name: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: player]; [notificationCenter addObserver: self selector: @selector (volumeChanged:) name: MPMusicPlayerControllerVolumeDidChangeNotification object: player]; [player beginGeneratingPlaybackNotifications]; } Po zarejestrowaniu się na odpowiednie powiadomienia należy się upewnić, że są one prawidłowo wyrejestrowywane podczas czyszczenia pamięci i widoków — w przeciwnym razie aplikacja może się zawiesić lub dojdzie do innego nieoczekiwanego zachowania. Wywołanie metody endGeneratingPlaybackNotifications jest wykonywane w metodzie viewDidUnload. -(void)viewWillDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification object: player]; [[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerPlaybackStateDidChangeNotification object: player]; [[NSNotificationCenter defaultCenter] removeObserver: self name: MPMusicPlayerControllerVolumeDidChangeNotification object: player]; [player endGeneratingPlaybackNotifications]; [super viewWillDisappear: animated]; } Dodatkowo utworzymy zegar (NSTimer), który posłuży nam do odświeżania interfejsu użytkownika w miarę postępu w odtwarzaniu utworu. W przykładowej aplikacji obiekt klasy NSTimer nosi nazwę playbackTimer. Na razie wywołania zwrotne do obsługi powiadomień i zachowanie zegara pozostaną niedokończone. Omówimy je później w podrozdziale „Obsługa zmiany stanu”. Kontrolki u(cid:276)ytkownika Przykładowa aplikacji zawiera kilka przycisków zaprojektowanych do obsługi odtwarzanych utworów. Są to przycisk odtwarzania (ang. play), pauzy (ang. pause), pomiń (ang. skip) i poprzedni (ang. previous). Użytkownik będzie zmieniać pozycję w aktualnie odtwarzanym Kup książkęPoleć książkę Tworzenie silnika odtwarzania 155 utworze o pół minuty. Najpierw musimy zaimplementować metody do odtwarzania i wstrzymywania utworu. Obie funkcje to zwykły przełącznik — jeśli muzyka jest odtwarzana, przycisk wstrzyma odtwarzanie, a jeśli jest wstrzymana — powróci do odtwarzania. Kod odpowiedzialny za odświeżenie treści przycisku jest omówiony jako fragment wywołania zwrotnego dla powiadomienia zmiany stanu w podrozdziale „Obsługa zmiany stanu”. - (IBAction)playButtonAction:(id)sender { if ([player playbackState] == MPMusicPlaybackStatePlaying) { [player pause]; } else { [player play]; } } Użytkownik powinien móc pominąć aktualną ścieżkę lub przejść do poprzedniej. Osiągniemy to, wykonując dwa dodatkowe wywołania za pomocą obiektu player. - (IBAction)previousButtonAction:(id)sender { [player skipToPreviousItem]; } - (IBAction)nextButtonAction:(id)sender { [player skipToNextItem]; } Użytkownicy będą mogli przejść o 30 sekund do przodu lub do tyłu. Jeśli użytkownik osiągnie koniec odtwarzanej ścieżki, poniższy kod spowoduje przejście do następnej. Podobnie jeśli zostanie osiągnięty moment za początkiem utworu, ścieżka zostanie ponownie odtworzona. Obie metody wykorzystują właściwość currentPlaybackTime obiektu odtwarzacza. Właściwość ta może być używana do zmiany informacji na temat aktualnie odtwarzanego utworu. - (IBAction)skipBack30Seconds:(id)sender { int newPlayHead = player.currentPlaybackTime - 30; if(newPlayHead 0) { newPlayHead = 0; } player.currentPlaybackTime = newPlayHead; } - (IBAction)skipForward30Seconds:(id)sender Kup książkęPoleć książkę 156 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki { int newPlayHead = player.currentPlaybackTime + 30; if(newPlayHead currentSongDuration) { [player skipToNextItem]; } else { player.currentPlaybackTime = newPlayHead; } } Poza udostępnieniem standardowych kontrolek w przykładowej aplikacji umożliwiamy także zmianę poziomu głośności audio. Obiekt odtwarzacza przyjmuje wartości od 0.0 (wyciszenie) do 1.0 (maksymalna głośność). Skoro korzystamy z kontrolki UISlider, wartość może być przekazana bezpośrednio do odtwarzacza. - (IBAction)volumeSliderChanged:(id)sender { [player setVolume:[volumeSlider value]]; } Obs(cid:228)uga zmiany stanu Wspomniałem już wcześniej, że zostały zarejestrowane trzy powiadomienia, dla których otrzymamy wywołania zwrotne. Powiadomienia te pozwalają aplikacji na określanie stanu i zachowania klasy MPMusicPlayerController. Pierwsza metoda będzie wywoływana w momencie zmiany aktualnie odtwarzanego utworu. Metoda ta składa się z dwóch części. Najpierw aktualizujemy okładkę albumu, a następnie modyfikujemy etykiety opisujące artystę, tytuł piosenki i nazwę odtwarzanego albumu. Każdy plik odtwarzany przy użyciu klasy MPMusicPlayerController jest reprezentowany za pomocą obiektu klasy MPMediaItem. Dostęp do obiektu jest możliwy przy użyciu metody nowPlayingItem tej klasy. Okładka albumu jest tworzona za pomocą obiektu klasy UIImage. Domyślnie otrzymuje ona obrazek zastępczy, który będzie widoczny w sytuacji, gdy użytkownik nie dysponuje okładką albumu dla danego elementu typu MPMediaItem. Klasa MPMediaItem wykorzystuje właściwości w postaci klucz-wartość w celu przechowywania danych. Pełna lista właściwości została przedstawiona w tabeli 6.1. Następnie tworzymy obiekt typu MPMediaItemArtwork i przypisujemy do niego okładkę. Choć według dokumentacji w przypadku braku okładki powinniśmy otrzymać wartość nil, w praktyce tak się nie dzieje. Jest na to prosta rada — należy wczytać album do obiektu typu UIImage i sprawdzić otrzymaną wartość. Jeśli jest to wartość nil, możemy założyć, że nie dysponujemy okładką, w związku z czym zostanie załadowany obrazek zastępczy. Kod zawarty w przykładowej aplikacji będzie działać nawet wtedy, gdy klasa MPMediaItemArtwork zacznie zwracać wartość nil w przypadku braku okładki. Kup książkęPoleć książkę Tworzenie silnika odtwarzania 157 Tabela 6.1. Atrybuty dost(cid:246)pne w trakcie pracy z klas(cid:241) MPMediaItem Atrybuty dost(cid:246)pne w klasie MPMediaItem MPMediaItemPropertyPersistentID MPMediaItemPropertyAlbumPersistentID MPMediaItemPropertyArtistPersistentID MPMediaItemPropertyAlbumArtistPersistentID MPMediaItemPropertyGenrePersistentID MPMediaItemPropertyComposerPersistentID MPMediaItemPropertyPodcastPersistentID MPMediaItemPropertyMediaType MPMediaItemPropertyTitle MPMediaItemPropertyAlbumTitle MPMediaItemPropertyArtist MPMediaItemPropertyAlbumArtist MPMediaItemPropertyGenre MPMediaItemPropertyComposer MPMediaItemPropertyPlaybackDuration MPMediaItemPropertyAlbumTrackNumber MPMediaItemPropertyAlbumTrackCount MPMediaItemPropertyDiscNumber MPMediaItemPropertyDiscCount MPMediaItemPropertyArtwork MPMediaItemPropertyLyrics MPMediaItemPropertyIsCompilation MPMediaItemPropertyReleaseDate MPMediaItemPropertyBeatsPerMinute MPMediaItemPropertyComments MPMediaItemPropertyAssetURL MPMediaItemPropertyIsCloudItem Dost(cid:246)pne do przeszukiwania predykatowego? TAK TAK TAK TAK TAK TAK TAK TAK TAK TAK TAK TAK TAK TAK NIE NIE NIE NIE NIE NIE NIE TAK NIE NIE NIE NIE TAK Druga część metody nowPlayingItemChanged: zajmie się aktualizacją tytułu piosenki, informacji o wykonawcy i nazwy albumu (rysunek 6.1). Jeśli którakolwiek z tych właściwości zwróci nil, zostanie ustawiony obrazek zastępczy. Pełna lista dostępnych właściwości została przedstawiona w tabeli 6.1. Pamiętaj, że w przypadku podcastów będą dostępne Kup książkęPoleć książkę 158 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki dodatkowe atrybuty, opisane przez Apple w dokumentacji dla klasy MPMediaItem. Dodatkowo w tabeli 6.1 określamy, czy klucz może być wykorzystany do przeszukiwania predykatowego w przypadku wyszukiwania z poziomu kodu obiektów typu MPMediaItem. - (void) nowPlayingItemChanged: (id) notification { MPMediaItem *currentItem = [player nowPlayingItem]; UIImage *artworkImage = [UIImage imageNamed:@ noArt.png ]; MPMediaItemArtwork *artwork = [currentItem valueForProperty: (cid:180)MPMediaItemPropertyArtwork]; if (artwork) { artworkImage = [artwork imageWithSize: CGSizeMake (120,120)]; if(artworkImage == nil) { artworkImage = [UIImage imageNamed:@ noArt.png ]; } } [albumImageView setImage:artworkImage]; NSString *titleString = [currentItem valueForProperty:MPMediaItemPropertyTitle]; if (titleString) { songLabel.text = titleString; } else { songLabel.text = @ Nieznany utwór ; } NSString *artistString = [currentItem valueForProperty:MPMediaItemPropertyArtist]; if (artistString) { artistLabel.text = artistString; } else { artistLabel.text = @ Nieznany artysta ; } NSString *albumString = [currentItem valueForProperty:MPMediaItemPropertyAlbumTitle]; Kup książkęPoleć książkę Tworzenie silnika odtwarzania 159 if (albumString) { recordLabel.text = albumString; } else { recordLabel.text = @ Nieznane nagranie ; } } Monitorowanie stanu odtwarzacza jest niezwykle ważne, zwłaszcza że wartość ta może być modyfikowana poza aplikacją. W momencie zmiany stanu zostanie wywołana metoda playbackStateChanged:. Nowo tworzona zmienna playbackState służy do przechowywania stanu odtwarzacza. Metoda ta wykonuje wiele istotnych zadań — przede wszystkim aktualizuje stan przycisku odtwarzania, aby odzwierciedlić obecny stan. Ponadto metoda ta jest odpowiedzialna zarówno za tworzenie, jak i usuwanie obiektu klasy NSTimer, o którym wspominałem już wcześniej. W trakcie odtwarzania utworu zadanie zegara jest wykonywane co 0,3 sekundy. Do jego zadań należą aktualizacja etykiet związanych z odtwarzaniem oraz modyfikowanie stanu kontrolki UIProgressIndicator informującej użytkownika o momencie odtwarzania utworu, w którym obecnie się znajdujemy. Metodę, którą wykonuje zegar (updateCurrentPlaybackTime), omówimy w kolejnym podrozdziale. Poza stanami przedstawionymi w przykładowej aplikacji możemy skorzystać z trzech dodatkowych. Pierwszy z nich — MPMusicPlaybackStateInterrupted — jest używany w momencie przerwania odtwarzania muzyki, np. w wyniku przychodzącego połączenia telefonicznego. Kolejne dwa stany — MPMusicPlaybackStateSeekingForward i MPMusicPlaybackStateSeekingBackward — są wykorzystywane do zgłoszenia, że stan odtwarzacza został przesunięty w przód lub w tył. - (void) playbackStateChanged: (id) notification { MPMusicPlaybackState playbackState = [player playbackState]; if (playbackState == MPMusicPlaybackStatePaused) { [playButton setTitle:@ Odtwarzaj forState:UIControlStateNormal]; if([playbackTimer isValid]) { [playbackTimer invalidate]; } } else if (playbackState == MPMusicPlaybackStatePlaying) { [playButton setTitle:@ Pauza forState: UIControlStateNormal]; playbackTimer = [NSTimer Kup książkęPoleć książkę 160 Rozdzia(cid:228) 6. Obs(cid:228)uga bibliotek muzyki scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(updateCurrentPlaybackTime) userInfo:nil repeats:YES]; } else if (playbackState == MPMusicPlaybackStateStopped) { [playButton setTitle:@ Odtwarzaj forState:UIControlStateNormal]; [player stop]; if([playbackTimer isValid]) { [playbackTimer invalidate]; } } } W sytuacji gdy głośność uległa zmianie, niezwykle ważne jest odzwierciedlenie zmiany również w interfejsie użytkownika. Wystarczy obserwować powiadomienie volumeChanged:. Wewnątrz metody możemy pobrać aktualną głośność odtwarzacza i ustawić odpowiednio kontrolkę głośności. - (void) volumeChanged: (id) notification { [volumeSlider setValue:[player volume]]; } Czas trwania a zegary Większość użytkowników z pewnością zechce wiedzieć, w którym momencie trwania piosenki obecnie się znajdują lub ile czasu pozostało do jej końca. Przykładowa aplikacja zawiera dwie metody do generowania tych danych. Pierwsza z nich — updateSongDuration — jest wywoływana w momencie zmiany utworu lub uruchomienia aplikacji. Tworzymy w niej odwołanie do aktywnej ścieżki, a także pobieramy czas trwania przy użyciu klucza playbackDuration. Całkowita liczba godzin, minut i sekund jest obliczana bezpośrednio na podstawie tej wartości, a etykieta odpowiedzialna za wyświetlanie tych informacji jest przedstawiona tuż obok kontrolki UIProgressIndicator. -(void)updateSongDuration; { currentSongPlaybackTime = 0; currentSongDuration = [[[player nowPlayingItem] valueForProperty: (cid:180)@ playbackDuration ] floatValue]; int tHours = (currentSongDuration / 3600); int tMins = ((currentSongDuration / 60) - tHours*60); int tSecs = (currentSongDuration ) - (tMins*60) - (tHours *3600); Kup książkęPoleć książkę Tworzenie silnika odtwarzania 161 songDurationLabel.text = [NSString stringWithFormat:@ i: 02d: 02d , (cid:180)tHours, tMins, tSecs]; currentTimeLabel.text = @ 0:00:00 ; } Druga metoda, updateCurrentPlaybackTime, jest wykonywana co 0,3 sekundy przy użyciu zegara (NSTimer), który jest kontrolowany z poziomu poprzednio omówionej metody playbackStateChanged:. Do obliczenia godzin, minut oraz sekund korzystamy z tego samego algorytmu co w metodzie updateSongDuration. Wartość zmiennej percentagePlayed jest obliczana bezpośrednio na podstawie uzyskanego czasu trwania utworu. Korzystamy z niej do aktualizacji kontrolki playbackProgressIndicator. Biorąc pod uwagę, że czas przechowywany w zmiennej currentPlaybackTime jest podawany z dokładnością do jednej sekundy, teoretycznie nie musimy wywoływać jej zbyt często. Z drugiej strony im częściej będziemy wywoływać tę metodę, tym lepszą dokładność czasową uzyskamy. -(void)updateCurrentPlaybackTime; { currentSongPlaybackTime = player.currentPlaybackTime; int tHours = (currentSongPlaybackTime / 3600); int tMins = ((currentSongPlaybackTime / 60) - tHours*60); int tSecs = (currentSongPlaybackTime) - (tMins*60) - (tHours*3600); currentTimeLabel.text = [NSString stringWithFormat:@ i: 02d: 02d , (cid:180)tHours, tMins, tSecs]; float percentagePlayed = currentSongPlaybackTime/currentSongDuration; [playbackProgressIndicator setProgress:percentagePlayed]; } Tryb losowy i powtarzanie Do kolejnych funkcjonalności udostępnianych przez klasę MPMusicPlayerController zaliczamy możliwość powtórzenia odtwarzanego utworu i tryb losowy. Chociaż przykładowa aplikacja nie zawiera implementacji obu właściwości, dodanie jej nie jest zbyt skomplikowane: player.repeatMode = MPMusicRepeatModeAll; player.shuffleMode = MPMusicShuffleModeSongs; Dostępne tryby powtarzania to: MPMusicRepeatModeDefault (domyślny — zgodnie z wcze
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

iOS. Tajniki SDK. Biblioteka przydatnych narzędzi
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: