iOS 8 Cum se construiește o extensie de acțiune simplă

Extensiile de aplicații au fost introduse în WWDC 14 ca o modalitate de a extinde funcționalitatea aplicațiilor iOS la alte părți ale sistemului și pentru a permite o mai bună comunicare între aplicații.

Pentru a numi câteva, puteți utiliza o extensie Astăzi pentru a crea un widget care va apărea în Centrul de notificări, o extensie de distribuire care permite utilizatorului partajarea în rețeaua socială sau o extensie de acțiune care permite utilizatorului să acționeze în funcție de conținutul actual - fie să îl vizualizați într-un mod diferit sau să îl schimbați. În acest tutorial hands-on, vom construi o extensie de acțiune de la zero.

Chiar dacă tutorialul nu necesită cunoștințe suplimentare, vă recomand să aruncați o privire asupra câtorva resurse dacă doriți să aflați mai multe despre extensii după ce ați citit acest tutorial.

  • Sesiuni WWDC Crearea extensiilor pentru iOS și OS X, Partea 1 și 2
  • Extensie Ghid de Programare

1. Ce vom construi??

Vom construi o extensie de acțiune simplă numită "Citiți-o". Extensia va accepta textul ca intrare și va citi textul utilizând API-ul de sinteză a vorbirii din cadrul AVFoundation. Cred că acest lucru funcționează bine pentru tutorial, pentru că nu introducem dependențe de la terțe părți sau alte dificultăți.

Așa va arăta extensia când va fi terminată. Puteți descărca rezultatul acestui tutorial de la GitHub.

2. Crearea unei extensii de acțiune

Pasul 1: Configurarea proiectului

Începeți prin lansarea Xcode 6.1 sau o versiune ulterioară și creați un nou proiect. Selectați Nou> Proiect ... din Xcode Fişier meniu și alegeți Vizualizare individuală din lista de șabloane.

Clic Următor → și dați proiectului dvs. un nume de SampleActionExtensionApp. Introdu un Identificarea organizației și stabilit Dispozitive la iPhone. Limba pe care o vom folosi pentru acest tutorial este Obiectiv-C.

Pasul 2: Adăugați țintă

Odată ce ați creat proiectul, puteți adăuga o țintă pentru extensia de acțiune. Selectați Nou> Țintă ... de la Fişier meniul. În panoul din stânga, selectați Extensie de aplicație de la iOS secțiune, selectați Extensie de acțiune, și faceți clic pe Următor →.

Seteaza numele produsului la ReadItAction. De asemenea, rețineți celelalte opțiuni, în special Tip de acțiune. O să ajung la asta într-un minut. Clic finalizarea pentru a crea extensia de acțiune.

Veți fi întrebat dacă doriți să activați ReadItAction sistem. Clic Anulare, deoarece vom instala extensia de acțiune executând în schimb aplicația care conține.

Tipuri de acțiuni

Există două tipuri de extensii de acțiune, una cu o interfață de utilizator și una fără unul. S-ar putea să te întrebi ce beneficiează de a avea o extensie de acțiune fără o interfață de utilizator, așa că lasă-mă să explic.

Extensiile de acțiune fără o interfață de utilizator acționează asupra elementului curent într-un mod care îl modifică. De exemplu, o extensie de acțiune poate elimina ochii roșii din fotografii și nu are nevoie de o interfață de utilizator pentru a face acest lucru. Aplicația care conține aceasta are apoi o șansă de a utiliza conținutul modificat, fotografia îmbunătățită în acest caz.

Extensiile de acțiune cu interfața de utilizator pot fi fie pe ecran complet, fie sunt prezentate ca foi de formular. Scopul țintei de extindere a acțiunii folosește prezentarea pe ecran complet, astfel că vom folosi.

Pasul 3: Implementarea interfeței utilizator

Acum, când avem setările de bază, putem începe să creăm interfața cu utilizatorul. Vom începe cu aplicația care conține.

Apasă pe Main.storyboard în SampleActionExtensionApp grup în Project NavigatorÎn panoul din dreapta, selectați Inspector de dosar și debifați Utilizați clase de mărime. Rețineți că dacă creați o aplicație reală și ar trebui să îl sprijiniți pe iPad, probabil că ar fi o idee bună să folosiți clase de mărime.

Deschide Biblioteca de obiecte și trageți o vizualizare de text și o bară de instrumente pe vizualizare. Setați cadrul de afișare a textului la x: 8, y: 20, lățimea: 304, înălțimea: 288 în Inspector de mărime pe dreapta. În ceea ce privește bara de instrumente, setați cadrul la x: 0, y: 308, lățimea: 320, înălțimea: 44 în Inspector de mărime.

Bara de instrumente conține un buton de bare. Selectați-l și, în Atribuții Inspector, setați-o Stil la Simplu si este Identificator la Acțiune.

Ca o atingere finală, eliminați textul implicit al vizualizării de text și înlocuiți-l cu "Atingeți butonul de acțiune pentru a invoca controlerul de vizualizare a activității. Apoi selectați acțiunea" Citiți-o "și acest text va fi citit de extensia noastră de acțiune".

Interfața utilizator a controlerului de vizualizare ar trebui să aibă acum un aspect similar:

Bineînțeles, am fi putut lăsa aplicația neobișnuită. La urma urmei, construim o extensie de aplicație pentru exemplul, astfel încât aplicația să nu trebuiască să facă nimic. Dar am vrut să arăt cât de ușor este să invocați controlorul de activitate din interiorul aplicației dvs. și să oferiți un punct în care pot veni alte extensii de acțiune.

Când este apăsat butonul din bara de instrumente, este prezentat un controler de vizualizare a activității și vom putea invoca extensia de acțiune de acolo. Un alt motiv bun este că, dacă doriți să publicați extensia dvs. pe App Store, aceasta trebuie să facă parte dintr-o aplicație reală și, evident, aplicația trebuie să facă ceva pentru ca aceasta să fie aprobată.

Pasul 4: Controlul vizualizării activității prezente

Apoi, trebuie să adăugăm un cod ViewController.m. Începeți prin crearea unei prize pentru vizualizarea textului în extensia de clasă a controlerului de vizualizare, după cum se arată mai jos.

@ interfață ViewController () @property (nonatomic, slab) IBOutlet UITextView * textView; @Sfârșit

Creați o acțiune numită actionButtonPressed în care inițializăm și prezentăm un UIActivityViewController instanță și să le prezinte utilizatorului.

- (IBAction) actionButtonPressed: (id) expeditor UIActivityViewController * activityVC = [[UIActivityViewController alloc] initWithActivityItems: @ [auto.textView.text] aplicațieActivități: nil]; [auto prezentViewController: activitateVC animat: DA finalizare: nil]; 

Înapoi la Main.storyboard și conectați priza de vizualizare text la vizualizarea text prin apăsarea tastei Control și tragerea din Vizualizați controlerul obiect în Vizualizați scena controlerului la vizualizarea text, selectând TextView din meniul popup.

Pentru a conecta metoda de acțiune, selectați butonul de bara din bara de instrumente și deschideți Conectarea inspectorului. Trageți de la selector, sub Acțiuni trimise, la Vizualizați controlerul obiect, selectarea actionButtonPressed: din meniul popup.

Cu interfața de utilizator a aplicației gata și conectată, putem trece la construirea extensiei de acțiune.

Pasul 5: Implementarea interfeței utilizator

În Project Navigator, extindeți ReadItAction grup și faceți clic pe MainInterface.storyboard. Veți observa că storyboard-ul nu este gol și conține deja câteva componente ale interfeței utilizator. Vom folosi câteva dintre ele, dar nu avem nevoie de vizualizarea imaginilor. Selectați vizualizarea imaginilor și scoateți-o apăsând Șterge.

Deschide Biblioteca de obiecte și adăugați o vizualizare de text sub bara de navigare. Schimbați cadrul la x: 8, y: 72, lățimea: 304, înălțimea: 300. În cele din urmă, faceți dublu clic pe vizualizarea titlurilor barei de navigare și setați titlul la "Reader text".

Pasul 6: Implementați ActionViewController

Este timpul să implementați extensia de acțiune. În Project Navigator, Selectați ActionViewController.m și efectuați următoarele modificări.

Sub instrucțiunile de import adăugați o declarație de import pentru cadrul AVFoundation, astfel încât să putem utiliza algoritmul de sinteză a vorbirii în extensia de acțiune.

@import AVFoundation;

În extensia clasei ActionViewController clasa, eliminați ImageView și adăugați unul pentru vizualizarea textului pe care am adăugat-o mai devreme.

@ interfata ActionViewController () @property (nonatomic, puternic) IBOutlet UITextView * textView; @Sfârșit

Trebuie, de asemenea, să facem unele modificări la viewDidLoad metodă a ActionViewController clasă.

- (vid) viewDidLoad [super viewDidLoad]; // Obțineți articolul [s] pe care îl manipulăm din contextul extensiei. // În extensia noastră de acțiune, avem nevoie doar de un element de intrare (text), deci vom folosi primul element din matrice. NSExtensionItem * item = auto.extensionContext.inputItems [0]; NSItemProvider * itemProvider = item.attachments [0]; dacă ([itemProvider hasItemConformingToTypeIdentifier: (NSString *) kUTTypePlainText]) // Este un text simplu! __weak UITextView * textView = auto.textVizualizare; [itemProvider loadItemForTypeIdentifier: (NSString *) opțiuni kUTTypePlainText: null completionHandler: ^ (NSString * item, eroare NSError *) if (item) [NSOperationQueue mainQueue] addOperationWithBlock: ^ [textView setText: item]; // Creați sintetizator de vorbire și porniți-l AVSpeechSynthesizer * synthesizer = [[AVSpeechSynthesizer alloc] init]; AVSpeechUtterance * utterance = [Rezoluția AVSpeechUtteranceWithString: textView.text]; [pronunție setRate: 0.1]; [sintetizator speakUtterance: utterance]; ]; ]; 

Implementarea este destul de ușor de înțeles. În viewDidLoad, obținem textul de intrare, îl atribuim vizualizării de text și creăm un obiect de sintetizator de vorbire care îl va citi.

Pasul 7: Configurați extensia de acțiune

Chiar dacă ne apropiem de noi, există câteva lucruri pe care trebuie să le avem în continuare. În primul rând, trebuie să conectăm vizualizarea textului din storyboard la priza creată cu un moment în urmă.

Deschis MainInterface.storyboard și conectați vizualizarea text la Imagine scenă așa cum am făcut-o Main.storyboard un minut în urmă.

De asemenea, trebuie să specificăm ce tipuri de date acceptă extensia de acțiune. În cazul nostru, este doar text. Extindeți Susținerea fișierelor grup și selectați Info.plist. În Info.plist, navigheaza catre NSExtension> NSExtensionAttributes> NSExtensionActivationRule. Schimba NSExtensionActivationRulede tip de la Şir la Dicţionar.

Cu dicționarul extins, faceți clic pe + butonul de lângă el. Aceasta va adăuga o cheie pentru copii. Setați numele său la NSExtensionActivationSupportsText, tipul său la boolean, și valoarea la DA. Aceasta asigură faptul că extensia de acțiune este vizibilă numai atunci când elementele de intrare conțin text.

Încă în Info.plist, schimba Numele afișat al pachetului la Citește. Arată mai bine. Aceasta este partea aferentă Info.plist fișier ar trebui să arate:


Pasul 8

Ca o atingere finală, puteți adăuga o pictogramă pentru extensia de acțiune. În Project Navigator, selectați proiectul și, sub ținte, selectați ReadItAction ţintă. De la General în tabul App icons și lansarea imaginilor secțiune, apăsați Utilizați Catalogul de active Alături de App Sources Icons. În prompt, faceți clic pe Migra. Navigați la catalogul de materiale și trageți pictograma de mai jos pe iPhone App iOS 7,8 60pt 2x loc.

Construiți și rulați aplicația pentru a vedea dacă totul funcționează conform așteptărilor. Există însă un singur lucru. Dacă pictograma de sunet nu este afișată pe extensia de acțiune, trebuie să vă asigurați că principalul Images.xcassets fișierul este copiat în țintă extensie.

Pentru a face acest lucru, selectați proiectul în Project Navigator și alegeți ReadItAction țintă din lista de Obiective. Deschide Construiți faze fila din partea de sus și extindeți-o Copiați resursele pachetului fază. În cazul în care Images.xcassets fișierul nu este în lista de resurse, apoi faceți clic pe simbolul plus plus pentru al adăuga în listă.

3. Rulați și testați

Rulați aplicația pentru ao încerca. Mai jos sunt două capturi de ecran care arată extensia în acțiune. De asemenea, puteți încerca să invocați acest controler de vizualizare a activității din aplicația Note și să lăsați extensia noastră să citească câteva dintre notele dvs. De asemenea, încercați să deschideți foaia de activitate în aplicația Fotografii, veți vedea că extensia noastră nu este listată, exact ceea ce ne-am fi așteptat pe baza regulilor de activare pe care le-am stabilit.

Concluzie

În acest tutorial, ați învățat cum să construiți o extensie de acțiune simplă. Am acoperit, de asemenea, elementele de bază ale utilizării API-ului de sinteză a vorbirii din cadrul AVFoundation. Dacă sunteți interesat de crearea altor extensii, consultați câteva alte tutoriale despre Tuts +, cum ar fi tutorialul lui Cesar Tessarin privind crearea unei extensii Today.

Dacă aveți comentarii sau întrebări, puteți să lăsați un comentariu în comentariile de mai jos sau să mă contactați pe Twitter.

Cod