Lær hvordan du taper inn kraften i den sosiale ramme med dette innlegget, tatt fra kapittel 11 i Mobiletuts + boken Dekoding av iOS 6 SDK!
Innføringen av Twitter-rammen i iOS 5 var det første skrittet mot integrering av iOS med populære sosiale nettverk. I IOS 6 introduserte Apple det sosiale rammeverket. Ikke bare gjør det sosiale rammeverket effektivt erstattet Twitter-rammen, det utvider også sin funksjonalitet ved å legge til støtte for både Facebook og Sina Weibo.
Selv om Twitter-rammeverket har blitt avskrevet fra iOS 6, er det heldigvis en triviell oppgave å migrere eksisterende kode fra Twitter-rammen til det sosiale rammeverket. API-ene i det sosiale rammeverket gjør ikke omtale av bestemte sosiale nettverk. Nettverkskomponenten er blitt abstraheret, noe som gjør det mulig å legge til støtte for nye sosiale nettverk i fremtiden en smertefri oppgave. Bunnlinjen: Den gode nyheten for utviklere er at det går lett å komme opp med det sosiale rammeverket, spesielt hvis du allerede er kjent med Twitter-rammen.
I dette kapitlet vil jeg gi deg en oversikt over det sosiale rammeverket og hva det har å tilby, og jeg vil vise deg hva alternativene dine er når du vil legge til en sosial komponent i dine applikasjoner. Mens dette kapittelet bare vil dekke grunnleggende om det sosiale rammeverket, vil neste kapittel snakke om en mer grundig integrering av søknaden din med det sosiale rammeverket. Som en tilleggsbonus vil jeg også diskutere UIActivityViewController-klassen. Dette er et annet tillegg til UIKit som gjør at innholdet er en bris!
Før iOS 6 var det ikke så lett å dele innhold. Hvis du noen gang har integrert Facebook med et iOS-program, så har du nesten sikkert kommet inn i en rekke hindringer underveis. I IOS 6 er det imidlertid gjort en rekke betydelige forbedringer. Fra iOS 6 er integrering med sosiale nettverk nå bakt i operativsystemet, noe som gjør sosial deling mye enklere for SDK-utviklere.
I skrivende stund støtter det sosiale rammeverket integrasjon med Facebook, Sina Weibo og Twitter. Støtten til Twitter er den åpenbare grunnen til avskrivningen av Twitter-rammen. Sina Weibo kan være den merkelige anda på rad for noen av dere. Sina Weibo er en utrolig populær microblogging-plattform i Kina, en av de mest folkerike nasjonene på jorden, så det er ikke så rart å se integrasjonen i IOS.
Med det som er nevnt ovenfor, hvilke alternativer har du når et av programmene dine må integreres med Facebook, Twitter eller Sina Weibo? Den sosiale rammeverket tilbyr to alternativer, ved hjelp av (1) SLComposeViewController
klasse eller (2) SLRequest
klasse. Hvis du har jobbet med Twitter-rammen i IOS 5, så vil disse klassenavnene helt sikkert ringe en klokke.
I dette kapitlet vil jeg zoome inn på SLComposeViewController
klasse. Det er en brukervennlig og elegant løsning som gjør det mulig for brukerne å dele innhold med Twitter, Facebook og Sina Weibo. La oss ta en titt på denne nykommeren.
SLComposeViewController
Den enkleste måten å dele innhold med et av de støttede sosiale nettverkene er, er å bruke SLComposeViewController
klasse. Dets prefiks, SL, indikerer at det er en del av det sosiale rammeverket. De SLComposeViewController
klassen er ekvivalent av TWTweetComposeViewController
klassen av Twitter-rammen. Den viktigste forskjellen er det SLComposeViewController
er ikke knyttet til et spesielt sosialt nettverk.
Skaper en forekomst av SLComposeViewController
er like enkelt som å ringe composeViewControllerForServiceType:
på klassen og bestått av tjenestetypen, det vil si det sosiale nettverket du målretter mot. På tidspunktet for skrivingen er det tre alternativer, SLServiceTypeTwitter
, SLServiceTypeFacebook
, og SLServiceTypeSinaWeibo
.
Du kan konfigurere SLComposeViewController
eksempel ved å sette inn den første teksten eller legge til et bilde eller en lenke. Konfigurere SLComposeViewController
eksempel er et valgfritt trinn, siden brukeren vil kunne endre innholdet i meldingen før den sendes til måltjenesten.
Før du presenterer komponentvisningskontrollen til brukeren, er det god praksis å sette ferdigstillingsbehandleren (SLComposeViewControllerCompletionHandler
). Sistnevnte er en blokk som utføres når forespørselen til tjenesten er ferdig, vellykket eller mislykket. Blokken tar en parameter, resultatet av forespørselen. Dette kan være nyttig hvis du vil informere brukeren om forespørselen var vellykket eller ikke.
Presentere SLComposeViewController
til brukeren er gjort ved å sende den en melding av presentViewController: animerte:
akkurat som du gjør med en hvilken som helst annen (modal) visningskontroller. Som nevnt tidligere, kan brukeren fortsatt redigere meldingen, geotag meldingen, eller legge til et bilde eller en lenke. Alternativene samt brukergrensesnittet til SLComposeViewController
forekomst avhenger av tjenesten som blir målrettet. Hvis brukeren sender en melding til Facebook, for eksempel, den modale visningen av SLComposeViewController
forekomsten er utsmykket med det velkjente, purpale fargeskjemaet.
De SLComposeViewController
klassen har en annen klassemetode verdt å nevne, isAvailableForServiceType:
. TWTweetComposeViewController har et lignende klassemetodenavn, canSendTweet
. Denne metoden lar applikasjonen din spørre operativsystemet om tjenesten du vil målrette, er tilgjengelig. Som med composeViewControllerForServiceType
, Klassemetoden vil godta en tjenestetype som indikerer hvilken tjeneste som er målrettet. Selv om isAvailableForServiceType:
returnerer a JA
eller NEI
, operativsystemet utfører et antall sjekker for deg bak kulissene. Det vil verifisere om det sosiale nettverket er tilgjengelig, og enda viktigere vil det kontrollere om brukeren har installert en gyldig konto for måltjenesten. La oss se nærmere på brukerkontoer og hvordan de styres av operativsystemet.
Det sosiale rammeverket vedtar et konsept kjent som single-sign-on (SSO), og det er viktig å forstå konsekvensene av denne designbeslutningen. Enkelt sagt er det ikke lenger nødvendig for hver tredjeparts applikasjon å autentisere seg med måltjenesten, operativsystemet tar nå av dette for deg og viser en rekke endpoeng til utviklere gjennom det sosiale rammeverket. Som du kanskje har gjettet, betyr dette at en sentral plassering for lagring av brukerens kontoer er nødvendig. Den sentrale plasseringen er selvfølgelig Innstillingsprogrammet til IOS, og lar brukerne administrere sine sosiale nettverkdetaljer fra Innstillinger gjør deling av innhold fra apper mye mer effektivt.
Mens applikasjonen iOS 6 Settings bare gir muligheten til å administrere en Facebook-konto, kan brukerne kontrollere flere Twitter-kontoer. Ved å lagre brukerens kontoer på ett sentralt sted, trenger tredjeparts applikasjonsutviklere ikke lenger å administrere disse sensitive dataene selv.
UIActivityViewController
UIActivityViewController
er et flott tillegg til UIKit. Det gjør deling av innhold en bris. Som klassenavnet innebærer, UIActivityViewController
er en underklasse av UIViewController
. UIActivityViewController
gjør deling av innhold trivielt ved å gi brukeren en rekke alternativer å velge mellom. Brukeren kan dele innhold via e-post, Twitter, eller bare lim inn en URL til utklippstavlen. Det er ganske mange alternativer å velge mellom, og sluttpunktene er ikke begrenset til de tre sosiale nettverkene som støttes av det sosiale rammeverket. Som UIActivityViewController
Navnet innebærer at klassen er en del av UIKit, ikke det sosiale rammeverket. Med andre ord er det ikke nødvendig å knytte prosjektet ditt mot det sosiale rammeverket hvis du bare vil bruke UIActivityViewController
klasse.
Selv om UIActivityViewController
er ikke en del av det sosiale rammeverket, jeg har valgt å inkludere det i dette kapittelet, da det deler noe grunnlag med det sosiale rammeverket. Faktisk vil du legge merke til det i noen få øyeblikk UIActivityViewController
deler ganske mye funksjonalitet med SLComposeViewController. For bedre å forstå UIActivityViewController
, Du kan sammenligne det med et postkontor. Et postkontor vil ta meldingen og sørge for at den er levert til adressen (tjenesten eller sluttpunktet) som er oppgitt av deg.
Noen av dere kan legge merke til at det har noe likhet med det velkjente open source-biblioteket ShareKit. UIActivityViewController
er mye kraftigere fordi den integrerer sømløst med operativsystemet og dets tjenester. Likevel, som med ShareKit, kan utviklere legge til egendefinerte endepunkter i rekkevidden av endepunkter som UIActivityViewController
integreres med og viser til brukeren.
Ved hjelp av UIActivityViewController
er like rettferdig som å bruke SLComposeViewController. Den utpekte initialiseringen av UIActivityViewController
tar to parametere, (1) aktivitetselementer og (2) applikasjonsaktiviteter. Begge argumentene må være forekomster av NSArray. Den første parameteren er en rekke dataobjekter du ønsker å dele. Oppsettet kan inneholde en eller flere tekstutdrag eller bare et enkelt bilde. Den typen innhold du kan dele, avhenger ikke bare av hvilken type data søknaden din kan gi, men også hvilken type data sluttpunktet aksepterer. De UIActivityViewController
klassen vil sørge for at dataobjektene behandles riktig avhengig av tjenesten eller sluttpunktet brukeren velger.
Den andre parameteren, applikasjonsaktivitetene, er en rekke tjenester eller endpoeng som UIActivityViewController
vil presentere til brukeren. Tjenester inkluderer e-post, Twitter, Facebook, utskrift eller kopiering av noe til utklippstavlen. Som nevnt tidligere, har utviklere muligheten til å legge til tjenester også. Hvis applikasjonsaktivitet er satt til null, vil operativsystemet bruke standardsettet av applikasjonsaktiviteter.
Etter å ha presentert UIActivityViewController
eksempel til brukeren, UIActivityViewController
vil ta vare på resten. For eksempel, hvis du har lagt til Twitter som en applikasjonsaktivitet, UIActivityViewController
Vil først sjekke om Twitter er tilgjengelig, og hvis brukeren har installert en Twitter-konto på enheten før den presenteres som et alternativ til sluttbrukeren. UIActivityViewController
sparer deg mye hodepine, og det tar bare noen få linjer med kode for å integrere med et program.
For å illustrere hvor enkelt det er å bruke UIActivityViewController
og SLComposeViewController
, Vi skal bygge en enkel shoebox-applikasjon for å dele bilder. Programmet lar brukerne snappe et bilde, legge til en bildetekst, og dele det med venner og familie. Prøveapplikasjonen vil vise deg hvor enkelt det er å dele dynamisk innhold i iOS 6.
Start med å opprette et nytt prosjekt i Xcode. Velg Enkeltvisningsprogram mal fra listen over maler (figur 3). Navngi søknaden din Sharetastic, skriv inn et firmanavn og en identifikator, sett inn iPhone for enhetsfamilien, og sjekk Bruk automatisk referansetelling. Fjern merket for de resterende avmerkingsboksene for dette prosjektet (figur 4). Angi hvor du vil lagre prosjektet og klikk på Skape knapp.
Siden vår søknad vil dra nytte av det sosiale rammeverket, må vi legge det til vårt prosjekt. Velg prosjektet i Prosjektnavigator og velg målet til høyre (figur 5). Velg Bygg faser kategorien øverst, åpne Link binær med biblioteker skuff, klikk på pluss-knappen og velg Social.framework fra listen (figur 5). Vårt prosjekt er nå vellykket knyttet til det sosiale rammeverket.
Ikke glem å legge til en importeringserklæring øverst i tittelkontrollens hovedfiler for å importere overskriftene til det sosiale rammene i prosjektet ditt.
#importere#importere
Før du oppretter brukerprogrammets brukergrensesnitt, må vi legge til nødvendige uttak og handlinger i headerfilen til visningskontrolleren. I alt fire utsalgssteder må legges til, a UITextField
for å skrive inn bildeteksten av bildet, a UIImageView
viser det snakkede bildet, og to UIButton
forekomster. Ved å trykke på den første knappen, sendes bildet og bildeteksten til brukerens Facebook-konto. Ved å trykke på den andre knappen får du en forekomst av UIActivityViewController
, presentere brukeren med en rekke alternativer for å dele bildet og bildeteksten. Som du kanskje har gjettet, er hver knapp bundet til en IBAction
. Kodestykket nedenfor viser hvordan tittelfilen til vår visningskontroller skal se ut:
#importere#importere @interface RPViewController: UIViewController @property (svak, ikkeatomisk) IBOutlet UITextField * captionTextField; @property (svak, ikkeatomisk) IBOutlet UIImageView * imageView; @property (svak, ikkeatomisk) IBOutlet UIButton * facebookButton; @property (svak, ikkeatomisk) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) avsender; - (IBAction) dele: (id) avsender; @slutt
Det er på tide å gå over til vår visningskontrollers XIB-fil. For å holde det enkelt, bruker vi ikke de nye iOS 6 Autolayout-funksjonene i dette kapittelet. Med visningskontrollens XIB-fil valgt, åpner du Filinspektør til høyre og fjern markeringen av Bruk Autolayout avkrysnings.
Med visningskontrollens XIB-fil valgt, starter du ved å dra et tekstfelt i visningskontrollens visning og plassere det øverst i visningen (figur 6). Konfigurer tekstfeltet ved å åpne Attributtsinspektør og endre plassholderteksten til Skriv inn bildetekst. Når tekstfeltet er valgt, åpner du Tilkoblingsinspektør og koble til tekstfeltet delegat uttak til Filens eier objekt til venstre. Dette betyr at visningskontrolleren vil fungere som tekstfeltets delegat. Årsaken til dette vil bli klart på bare noen få minutter. Pass på at du også har koblet til captionTextField
utløp til tekstfeltobjektet på skjermen.
Dra en forekomst av UIImageView
fra biblioteket til visningskontrollørens visning og plasser det under tekstfeltet (figur 6). Endre dimensjonene til 280 poeng med 280 poeng. Åpne Attributtsinspektør igjen og endre bildevisningens modus (innholdsmodus
) eiendom til Aspect Fit og sørg for å sjekke Brukerinteraksjon aktivert. Sistnevnte er viktig da vi vil legge til en trykkbevegelsesgjenkjenning til bildevisningen snart. Hvis vi ikke aktiverer brukerinteraksjon for bildevisningen, vil ikke trykkbevegelsesgenkjenningen fungere. Ikke glem å koble utgangskontrollerens uttak med bildevisningen. Den enkleste måten å gjøre dette på er å trykke på Ctrl
nøkkel, dra fra bildevisningen til filens eierobjekt og velg passende uttak.
For å fullføre programmets brukergrensesnitt, legg til to UIButton
forekommer i vår visning av kontrollerens visning og plasserer dem under bildevisningen (figur 6). Gi toppknappen en tittel på Facebook og nederste knappen en tittel på Dele. Koble de resterende uttakene som beskrevet ovenfor. I tillegg kobler du to handlinger til visningsregulatoren ved å trykke på Ctrl-tasten, dra fra objektets Eier-objekt til hver knapp, og deretter velge tilsvarende handling. Brukergrensesnittet er klart. Nå er det på tide å begynne å skrive noen kode for å få alt til å fungere!
Det er en ting vi må legge til i vår tittelkontrollers headerfil. Siden vi skal gjøre bruk av UIImagePickerController
For å ta bilder, må visningsstyreren overholde begge UINavigationControllerDelegate
og UIImagePickerControllerDelegate
protokoller. I tillegg, som jeg nevnte for noen få minutter siden, fungerer også visningscontrolleren som delegat av tekstfeltet for teksting. Dette betyr at visningsregulatoren trenger å være i samsvar med UITextFieldDelegate
protokollen også. Ta en titt på den oppdaterte headerfilen til visningscontrolleren for å få klarhet.
#importere#importere @interface RPViewController: UIViewController @property (svak, ikkeatomisk) IBOutlet UITextField * captionTextField; @property (svak, ikkeatomisk) IBOutlet UIImageView * imageView; @property (svak, ikkeatomisk) IBOutlet UIButton * facebookButton; @property (svak, ikkeatomisk) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) avsender; - (IBAction) dele: (id) avsender; @slutt
I vår visning kontrolleren implementeringsfil starter vi ved å utvide klassedepartementet og legge til en privat eiendom. Det er god praksis å ikke eksponere hver egenskap av en klasse ved å erklære dem i headerfilen, og en måte dette gjøres er ved å utvide klassedepartementet i implementeringsfilen. Etter den første importoppgaven og før @gjennomføring
direktiv, legg til koden nedenfor for å erklære en ny, privat eiendom. Eiendommen vil holde en referanse til bildet som brukeren klikker med enhetens kamera.
@interface RPViewController () @property (sterk, ikkeatomisk) UIImage * bilde; @slutt
En fin funksjon i Xcode 4.4 + er at du ikke lenger trenger å syntetisere eiendomsaksessorer. Dette er gjort for deg bak kulissene, og det følger Apples navngivningskonvensjoner. I vårt eksempel vil en instansvariabel bli opprettet med et navn på _bilde
og accessors for vår bildeegenskap blir automatisk syntetisert for oss.
Jeg liker alltid å begynne med å implementere visnings-livssyklusen til en visningskontroller. I tillegg foretrekker jeg også å beholde viewDidLoad
metode kort ved å legge til noen hjelpemetoder. En metode jeg nesten alltid lager er setupView
, som tar seg av å sette opp og konfigurere visningskontrollørens visning. La oss ta en titt på viewDidLoad
og setupView
metoder for å få en ide om hva jeg mener.
- (void) viewDidLoad [super viewDidLoad]; // Oppsettvisning [selvoppsettVisning]; - (void) setupView // Legg til Gesture Recognizer UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget: selvhandling: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Oppdater Vis [self updateView];
Som du kan se, er setupView
Metoden er ikke kompleks. Vi legger til en trykkbevegelsesgenkjenning til bildevisningen, slik at brukeren kan snappe et bilde ved å trykke på bildevisningen i brukergrensesnittet. Vi initialiserer først en trykkbevegelsesgjenkjenning, og legger den til vår bildevisning. Tappebrytelsesgenkjeneren sender meldingen snapImage:
til vår visningskontroller når brukeren tapper bildevisningen. Vi vil ta en titt på snapImage:
metode på bare et sekund.
På slutten av setupView
Metode, vi anvender updateView-metoden. Igjen, dette er en hjelpemetode jeg bruker veldig ofte som det tillater meg å gruppere logikken som er knyttet til oppdateringen av visningen. La oss ta en rask titt på updateView
metode.
- (void) updateView BOOL sharingEnabled = self.image? JA NEI; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha;
Som metodenavnet innebærer, oppdaterer metoden rett og slett visningen og dens undervisninger. Vi begynner med å verifisere om et bilde er tilgjengelig ved å sjekke om bildegenskapen er angitt. Hvis vi har et bilde å jobbe med, aktiverer vi Facebook og delingsknappene, og setter deres alfaverdier til 1,0. Hvis et bilde ikke er tilgjengelig, har brukeren ennå ikke tatt en, vi deaktiverer begge knappene og gjør dem litt gjennomsiktige for å vise til brukeren at knappene er deaktivert.
Ved å utnytte UIImagePickerController
, snapping bilder er en enkel og grei prosess. La oss begynne med å undersøke snapImage:
metode som påberopes av trykkbevegelsesgjenkjenning når brukeren tapper bildevisningen. Først en forekomst av UIImagePickerController
er initialisert og dens delegat er satt til selv, det vil si vår visningscontroller. Deretter spør vi operativsystemet om et kamera er tilgjengelig ved å ringe isSourceTypeAvailable
på UIImagePickerController
klasse og passerer den UIImagePickerControllerSourceTypeCamera
som argumentet. Basert på returverdi, angir vi kilde typen av vår UIImagePickerController
forekomst. Som en feilsikker, er kildetypen satt til UIImagePickerControllerSourceTypePhotoLibrary
hvis ikke kamera er tilgjengelig uansett grunn. Dette betyr at brukeren kan velge et bilde fra enhetens fotobibliotek. Endelig presenteres bildevalgkontrollen til brukeren.
- (void) takeImage: (UITapGestureRecognizer *) tgr // Initialiser Image Picker Controller UIImagePickerController * ip = [[UIImagePickerController alloc] init]; // Sett Delegate [ip setDelegate: self]; hvis ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Angi Kilde Type til Kamera [ip setSourceType: UIImagePickerControllerSourceTypeCamera]; ellers // Angi kilde type til fotobibliotek [ip setSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; // Present View Controller [self presentViewController: ip animert: JA ferdigstillelse: null];
Kan du gjette hva neste skritt er? Vi må implementere metodene til UIImagePickerControllerDelegate
protokoll. Protokollen har to metoder, imagePickerController: didFinishPickingMediaWithInfo:
og imagePickerControllerDidCancel:
. La meg gå deg gjennom hver metode.
I imagePickerController: didFinishPickingMediaWithInfo:
, Vi begynner med å lagre en referanse til det opprinnelige, ubehandlede bildet. I de neste kodelinjene tilordner vi det opprinnelige bildet til vår bildeegenskap og oppdaterer visningen. Husk at dette vil aktivere Facebook og dele knapper. Endelig avviser vi bildeplukkerkontrolleren.
- (void) imagePickerController: (UIImagePickerController *) plukkeren didFinishPickingMediaWithInfo: (NSDictionary *) info UIImage * originalImage = [info objectForKey: UIImagePickerControllerOriginalImage]; hvis (originalImage) self.image = originalImage; // Oppdater Vis [self updateView]; // Avvis Image Picker Controller [self dismissViewControllerAnimated: JA ferdigstillelse: null];
Den andre delegatemetoden inneholder bare én linje med kode. Hvis brukeren tapper avbryt-knappen, avbrytes bildevalgkontrollen uten videre.
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Avvis Image Picker Controller [self dismissViewControllerAnimated: JA fullføring: null];
Før du implementerer facebook:
og dele:
handlinger, jeg vil ta en liten omvei. Hvorfor har vi ikke tildelt bildet som ble nylig snappet til bildevisningens bildeegenskap? Tilordning av det nylig knuste bildet til bildegenskapen til vår bildevisning er faktisk et perfekt alternativ, men jeg har tatt en annen tilnærming. Siden innføringen av @synthesize
Direktivet glemmer folk ofte hvor nyttige settere og getters kan være. La meg forklare hva jeg mener med et eksempel.
I vår prøveapplikasjon har jeg overstyrt setteren til vår visningskontrollers bildeegenskap. Dette tillater meg å (1) gruppe relatert kode på ett sted og (2) bare oppdatere bildevisningen når bildet endres. Dette kan virke som en detalj med svært lite bruk på dette punktet, men det viser deg hvordan vi allerede kan begynne å optimalisere koden vår på subtile måter, noe som vil påvirke kodelesbarhet og jevn ytelse. I dette spesielle eksempelet vil det ikke påvirke ytelsen til vår søknad, men det er godt å bruke beste praksis når du passer.
Legg til følgende i implementeringsfilen nå:
- (void) setImage: (UIImage *) bilde if (_image! = image) _image = image; // Oppdater bildevisning self.imageView.image = _image;
Før vi kan begynne å dele bilder, må vi implementere en delegatemetode for UITextFieldDelegate
protokoll, det vil si, textFieldShouldReturn:
. I denne delegatemetoden avgår vi tekstfeltet som den første responderen hvis brukeren tapper tastaturets returknapp. Dette vil avvise tastaturet og avsløre deleknappene under det.
- (BOOL) textFieldShouldReturn: (UITextField *) textField // Avslutt første responder [textField resignFirstResponder]; returnere JA;
Det er på tide å få hendene skitne med det sosiale rammeverket og UIActivityViewController
. La oss starte med å implementere facebook:
metode. Det vil illustrere hvordan du skal bruke SLComposeViewController
. Ta en titt på implementeringen nedenfor og la oss slå den ned trinnvis.
- (IBAction) facebook: (id) avsender hvis ([SLComposeViewController isAvailableForServiceType: SLServiceTypeFacebook]) // Initialize Compose View Controller SLComposeViewController * vc = [SLComposeViewController composeViewControllerForServiceType: SLServiceTypeFacebook]; // Configure Compose View Controller [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Present Compose View Controller [self presentViewController: vc animert: JA ferdigstillelse: null]; else NSString * message = @ "Det ser ut til at vi ikke kan snakke med Facebook for øyeblikket, eller du har ikke lagt til Facebook-kontoen din på denne enheten. Gå til Settings-programmet for å legge til Facebook-kontoen din på denne enheten."; UIAlertView * alertView = [[UIAlertView tildeling] initWithTitle: @ "Oops" melding: melding delegat: null annullerButtonTitle: @ "OK" otherButtonTitles: null]; [alertView show];
Som nevnt tidligere, er det nødvendig å begynne med å spørre operativsystemet om tjenesten vi målretter mot er tilgjengelig. Hvis isAvailableForServiceType:
avkastning NEI
, Vi viser en varselvisning som forteller brukeren hva problemet kan være. Hvis tjenesten er tilgjengelig, initierer vi imidlertid en forekomst av SLComposeViewController
ved å påkalle klassemetoden composeViewControllerForServiceType:
. Argumentet vi overfører til klassemetoden er SLServiceTypeFacebook
, som indikerer at vi målretter mot Facebook-plattformen.
Selv om brukeren vår kan endre meldingen før du sender den til Facebook, fyller du meldingen med innholdet i teksttekstfeltet og legger til det knuste bildet i meldingen. Til slutt presenterer vi komposjonsvisningskontrollen til brukeren. Det er da opp til brukeren å redigere, avbryte eller legge inn meldingen. Brukeren er i kontroll. Dette er viktig å huske spesielt med neste kapittel i tankene hvor brukeren ikke alltid vet hva vår søknad gjør bak kulissene. På dette stadiet er søknaden vår klar til testing. Bygg og kjør din søknad på en testenhet og prøv det selv!
Som nevnt tidligere, er en av styrken i det sosiale rammeverket hvor lett det er å erstatte ett sosialt nettverk med en annen ved å endre tjenestetypen. La oss prøve dette ved å erstatte de to forekomstene av SLServiceTypeFacebook
med SLServiceTypeTwitter
. Med denne enkle endringen kan vi nå dele våre bilder med våre Twitter-følgere.
Vår søknad er ikke helt ferdig enda. Vi må fortsatt implementere dele:
metode. I denne metoden bruker vi UIActivityViewController
klasse for å dele det snakkede bildet og tilhørende bildetekst. Se på metodens implementering nedenfor.
- (IBAction) del: (id) avsender // Aktivitetselementer UIImage * image = self.image; NSString * caption = self.captionTextField.text; NSArray * activityItems = @ [bilde, bildetekst]; // Initialiser Aktivitetsvisningskontroller UIActivityViewController * vc = [[UIActivityViewController allokere] initWithActivityItems: activityItems applicationActivities: null]; // Present Aktivitetsvisning Controller [self presentViewController: vc animert: JA ferdigstillelse: null];
Vi lagrer først bildet og bildeteksten i en matrise. Bildet og bildeteksten er den såkalte activityItems
, som blir sendt som et argument til den utpekte initialisereren av UIActivityViewController
. Det er viktig å først passere bildet og deretter bildeteksten. Kan du gjette hvorfor?
Skjønnheten i UIActivityViewController
klassen er at den vet hvordan man skal håndtere dataobjektene i aktivitetsposten. Dette blir tydeligere når du tester delfunksjonaliteten. Den andre parameteren til initialiseringsmetoden er en matrise som inneholder tjenestene vi vil gjøre tilgjengelig for brukeren. Hvis du passerer nil
, operativsystemet vil vise brukeren hver tjeneste UIActivityViewController
har til rådighet. Det er ofte bedre å bare vise tjenestene som passer for et bestemt brukstilfelle.
Som jeg nevnte i introduksjonen, UIActivityViewController
Kontrollerer tilgjengeligheten av hver tjeneste bak kulissene. Navnet Applikasjonstjenester kan høres litt merkelig eller abstrakt, men den dekker et bredt utvalg av serviceendpunkter, for eksempel e-post, tekstmeldinger samt sosiale nettverk og utskrift.
På slutten av vår dele:
metode, presenterer vi forekomsten av UIActivityViewController
til brukeren. Bygg og kjør din søknad og prøv det selv.
UIActivityViewController
har to egenskaper, completionHandler
og excludedActivityTypes
. Ved å angi en ferdigstillingshåndterer, kan du utføre en blokk hvis brukeren tapper avbryt-knappen eller når delingsoperasjonen er fullført. Som du kanskje har gjettet, er ferdigstillingsbehandleren en blokk (UIActivityViewControllerCompletionHandler
) og tar to parametere, (1) aktivitetstypen og (2) en boolean som indikerer om tjenesten ble utført eller ikke. Den boolske verdien vil også bli satt til NEI
hvis brukeren kansellerer eller avviser UIActivityViewController
forekomst.
SLComposeViewController
har en ferdigstillingshåndterer som fungerer mye på samme måte. I stedet for to parametere, aksepterer den bare resultatet av operasjonen.
Du bør nå ha en god forståelse for hva det sosiale rammeverket kan tilby deg. Vi har tatt en nærmere titt på SLComposeViewController
i tillegg til UIActivityViewController
. Begge klassene er utrolig nyttige og likevel enkle å bruke. Deling av innhold pleide å være tungvint og smertefullt, men disse to klassene gjør prosessen mye lettere. Jeg er veldig fornøyd med innføringen av det sosiale rammeverket i IOS 6, samt med tillegg av UIActivityViewController
til UIKit.
Forhåpentligvis ser jeg de