Leer hoe je met dit bericht kunt profiteren van de kracht van het sociale raamwerk, ontleend aan hoofdstuk 11 van het boek Mobiletuts + Het decoderen van de iOS 6 SDK!
De introductie van het Twitter-framework in iOS 5 was de eerste stap naar de integratie van iOS met populaire sociale netwerken. In iOS 6 introduceerde Apple het sociale raamwerk. Het sociale raamwerk vervangt niet alleen effectief het Twitter-raamwerk, het breidt ook de functionaliteit uit door ondersteuning toe te voegen voor zowel Facebook als Sina Weibo.
Hoewel het Twitter-raamwerk vanaf iOS 6 is verouderd, is het gelukkig een triviale taak om bestaande code van het Twitter-raamwerk naar het sociale raamwerk te migreren. De API's van het sociale raamwerk vermelden geen specifieke sociale netwerken. De netwerkcomponent is weggevaagd, waardoor het toevoegen van ondersteuning voor nieuwe sociale netwerken in de toekomst een pijnloze taak wordt. Kortom: het goede nieuws voor ontwikkelaars is dat het gemakkelijk is om met het sociale raamwerk aan de slag te gaan, vooral als u al bekend bent met het Twitter-raamwerk.
In dit hoofdstuk zal ik u een overzicht geven van het sociale kader en wat het te bieden heeft en ik zal u laten zien wat uw opties zijn wanneer u een sociale component aan uw applicaties wilt toevoegen. Hoewel dit hoofdstuk alleen de basis van het sociale raamwerk zal behandelen, zal het volgende hoofdstuk gaan over een grondiger integratie van uw applicatie met het sociale raamwerk. Als een extra bonus, zal ik ook de UIActivityViewController class bespreken. Dit is een andere toevoeging aan UIKit die het delen van inhoud een fluitje van een cent maakt!
Voor iOS 6 was het delen van content niet zo eenvoudig. Als je ooit Facebook hebt geïntegreerd met een iOS-applicatie, dan ben je vrijwel zeker een aantal hindernissen tegengekomen. In iOS 6 zijn echter een aantal belangrijke verbeteringen aangebracht. Vanaf iOS 6 is integratie met sociale netwerken nu ingebakken in het besturingssysteem, waardoor sociaal delen veel gemakkelijker wordt voor SDK-ontwikkelaars.
Op het moment van schrijven ondersteunt het sociale raamwerk integratie met Facebook, Sina Weibo en Twitter. De ondersteuning voor Twitter is de voor de hand liggende reden voor de verwerping van het Twitter-raamwerk. Sina Weibo is misschien een vreemde eend in de rij voor sommigen van jullie. Sina Weibo is een immens populair microbloggingplatform in China, een van de meest bevolkte landen op aarde, dus het is niet zo vreemd om de integratie ervan in iOS te zien.
Met het bovenstaande in het achterhoofd, welke opties heeft u als een van uw applicaties moet worden geïntegreerd met Facebook, Twitter of Sina Weibo? Het sociale raamwerk biedt twee opties, met behulp van (1) de SLComposeViewController
klasse of (2) de SLRequest
klasse. Als je in iOS 5 met het Twitter-framework hebt gewerkt, zullen die klassenamen zeker een belletje doen rinkelen.
In dit hoofdstuk zoom ik in op de SLComposeViewController
klasse. Het is een eenvoudig te gebruiken en elegante oplossing om uw gebruikers inhoud te laten delen met Twitter, Facebook en Sina Weibo. Laten we naar deze nieuwkomer kijken.
SLComposeViewController
De eenvoudigste manier om inhoud te delen met een van de ondersteunde sociale netwerken is door gebruik te maken van de SLComposeViewController
klasse. Het voorvoegsel SL geeft aan dat het deel uitmaakt van het sociale raamwerk. De SLComposeViewController
klasse is het equivalent van de TWTweetComposeViewController
klasse van het Twitter-framework. Het belangrijkste verschil is dat SLComposeViewController
is niet gebonden aan een bepaald sociaal netwerk in het bijzonder.
Een instantie maken van SLComposeViewController
is net zo eenvoudig als bellen composeViewControllerForServiceType:
in de klasse en het servicetype doorgeven, dat wil zeggen, het sociale netwerk dat u target. Op het moment van schrijven zijn er drie opties, SLServiceTypeTwitter
, SLServiceTypeFacebook
, en SLServiceTypeSinaWeibo
.
U kunt het configureren SLComposeViewController
bijvoorbeeld door de eerste tekst in te stellen of door een afbeelding of koppeling toe te voegen. De. Configureren SLComposeViewController
instance is een optionele stap omdat de gebruiker de inhoud van het bericht kan wijzigen voordat het naar de doeldienst wordt verzonden.
Voordat de compose view-controller aan de gebruiker wordt gepresenteerd, is het een goede gewoonte om de voltooiingshandler in te stellen (SLComposeViewControllerCompletionHandler
). Dit laatste is een blok dat wordt uitgevoerd wanneer het verzoek aan de service is voltooid, met succes of zonder succes. Het blok neemt één parameter, het resultaat van het verzoek. Dit kan handig zijn als u de gebruiker wilt laten weten of het verzoek succesvol was of niet.
Presentatie van de SLComposeViewController
aan de gebruiker wordt gedaan door het een bericht te sturen van presentViewController: geanimeerd:
net als met elke andere (modale) weergavecontroller. Zoals ik eerder al zei, kan de gebruiker het bericht nog steeds bewerken, het bericht geotaggen of een afbeelding of link toevoegen. De opties en de gebruikersinterface van de SLComposeViewController
bijvoorbeeld afhankelijk van de service die wordt getarget. Als de gebruiker een bericht naar Facebook verzendt, bijvoorbeeld de modale weergave van de SLComposeViewController
instantie is versierd met het bekende paarsachtige kleurenschema.
De SLComposeViewController
klasse heeft een andere klassemethode die het vermelden waard is, isAvailableForServiceType:
. De TWTweetComposeViewController heeft een vergelijkbare naam voor de klassenmethode, canSendTweet
. Met deze methode kan uw toepassing het besturingssysteem vragen of de service die u wilt targeten beschikbaar is. Zoals met composeViewControllerForServiceType
, de klassemethode accepteert een servicetype dat aangeeft welke service wordt getarget. Hoewel isAvailableForServiceType:
geeft a terug JA
of NEE
, het besturingssysteem voert achter de schermen een aantal controles voor u uit. Het zal controleren of het sociale netwerk bereikbaar is en, nog belangrijker, het zal controleren of de gebruiker een geldig account voor de doelservice heeft geïnstalleerd. Laten we gebruikersaccounts nader bekijken en bekijken hoe deze worden beheerd door het besturingssysteem.
Het sociale kader hanteert een concept dat bekend staat als eenmalig inloggen (SSO), en het is belangrijk om de implicaties van deze ontwerpbeslissing te begrijpen. Simpel gezegd, het is niet langer nodig voor elke externe applicatie om zich te authenticeren met de doelservice, het besturingssysteem zorgt nu voor u en stelt een aantal eindpunten aan ontwikkelaars bloot via het sociale raamwerk. Zoals je misschien al geraden hebt, betekent dit dat een centrale locatie voor het opslaan van de gebruikersaccounts noodzakelijk is. Die centrale locatie is natuurlijk de app Instellingen van iOS, en stelt gebruikers in staat om hun sociale netwerkgegevens te beheren vanuit Instellingen maakt het delen van inhoud van binnen apps veel efficiënter.
Hoewel de applicatie iOS 6-instellingen alleen de mogelijkheid biedt om één Facebook-account te beheren, kunnen gebruikers meerdere Twitter-accounts beheren. Door de accounts van de gebruiker op één centrale locatie op te slaan, hoeven applicatieontwikkelaars van derde partijen deze gevoelige gegevens niet langer zelf te beheren.
UIActivityViewController
UIActivityViewController
is een prachtige toevoeging aan UIKit. Het maakt het delen van content een fluitje van een cent. Zoals de klassenaam impliceert, UIActivityViewController
is een subklasse van UIViewController
. UIActivityViewController
maakt het delen van inhoud triviaal door de gebruiker een reeks opties te geven waaruit hij kan kiezen. De gebruiker kan inhoud delen via e-mail, Twitter of gewoon een URL naar het klembord plakken. Er zijn nogal wat opties om uit te kiezen en de eindpunten zijn niet beperkt tot de drie sociale netwerken die door het sociale raamwerk worden ondersteund. Als de UIActivityViewController
naam impliceert, de klas maakt deel uit van UIKit, niet het sociale raamwerk. Met andere woorden, het is niet nodig om uw project te koppelen aan het sociale raamwerk als u alleen het UIActivityViewController
klasse.
Hoewel UIActivityViewController
maakt geen deel uit van het sociale raamwerk, ik heb ervoor gekozen om het in dit hoofdstuk op te nemen, omdat het een zekere grond deelt met het sociale kader. Sterker nog, dat merk je in enkele ogenblikken UIActivityViewController
deelt behoorlijk wat functionaliteit met SLComposeViewController. Om beter te begrijpen UIActivityViewController
, je zou het kunnen vergelijken met een postkantoor. Een postkantoor neemt uw bericht en zorgt ervoor dat het wordt afgeleverd op het adres (de service of het eindpunt) dat u hebt opgegeven.
Sommigen van u merken misschien dat het enige overeenkomst vertoont met de bekende open-sourcebibliotheek ShareKit. UIActivityViewController
is veel krachtiger, omdat het naadloos kan worden geïntegreerd met het besturingssysteem en de bijbehorende services. Net als met ShareKit kunnen ontwikkelaars echter aangepaste eindpunten toevoegen aan de reeks eindpunten UIActivityViewController
integreert met en geeft aan de gebruiker weer.
Gebruik makend van UIActivityViewController
is net zo eenvoudig als het gebruik van SLComposeViewController. De aangewezen initialisator van UIActivityViewController
neemt twee parameters, (1) activiteitenitems en (2) toepassingsactiviteiten. Beide argumenten moeten exemplaren van NSArray zijn. De eerste parameter is een array van gegevensobjecten die u wilt delen. De array kan een of meer tekstfragmenten of slechts één afbeelding bevatten. Het type inhoud dat u kunt delen, is niet alleen afhankelijk van welk type gegevens uw toepassing kan bieden, maar ook welk type gegevens het eindpunt accepteert. De UIActivityViewController
klasse zorgt ervoor dat de gegevensobjecten correct worden verwerkt, afhankelijk van de service of het eindpunt dat de gebruiker kiest.
De tweede parameter, toepassingsactiviteiten, is een reeks services of eindpunten die UIActivityViewController
zal presenteren aan de gebruiker. Diensten omvatten e-mail, Twitter, Facebook, afdrukken of iets kopiëren naar het klembord. Zoals eerder vermeld, hebben ontwikkelaars de mogelijkheid om ook services toe te voegen. Als de toepassingsactiviteiten op nul zijn ingesteld, gebruikt het besturingssysteem de standaardset toepassingsactiviteiten.
Na het presenteren van de UIActivityViewController
bijvoorbeeld voor de gebruiker, UIActivityViewController
zorgt voor de rest. Bijvoorbeeld als u Twitter hebt toegevoegd als een toepassingsactiviteit, UIActivityViewController
zal eerst controleren of Twitter beschikbaar is en of de gebruiker een Twitter-account op zijn apparaat heeft geïnstalleerd alvorens het als een optie aan de eindgebruiker te presenteren. UIActivityViewController
bespaart u veel hoofdbrekens en het duurt slechts enkele regels code om te integreren met een applicatie.
Om te illustreren hoe eenvoudig het is om te gebruiken UIActivityViewController
en SLComposeViewController
, we gaan een eenvoudige shoebox-applicatie bouwen om foto's te delen. Met de toepassing kunnen gebruikers een afbeelding uitsnijden, een bijschrift toevoegen en deze delen met vrienden en familie. In de voorbeeldtoepassing ziet u hoe eenvoudig het is om inhoud dynamisch te delen in iOS 6.
Begin met het maken van een nieuw project in Xcode. Selecteer de Toepassing enkele weergave sjabloon uit de lijst met sjablonen (figuur 3). Geef uw applicatie een naam Sharetastic, voer een bedrijfsnaam en ID in, stel de iPhone in voor de apparaatfamilie en controleer Gebruik automatische referentietelling. Verwijder de selectie van de overige selectievakjes voor dit project (figuur 4). Geef op waar u het project wilt opslaan en klik op de creëren knop.
Aangezien onze applicatie gebruik zal maken van het sociale raamwerk, moeten we dit aan ons project toevoegen. Selecteer het project in de Project Navigator en selecteer het doel aan de rechterkant (figuur 5). Selecteer de Bouw fases tab bovenaan, open de Binaire koppeling met bibliotheken lade, klik op de plusknop en kies Social.framework van de lijst (figuur 5). Ons project is nu succesvol gekoppeld aan het sociale raamwerk.
Vergeet niet om een importinstructie boven aan het header-bestand van onze view controller toe te voegen om de headers van het sociale framework in uw project te importeren.
#importeren#importeren
Voordat we de gebruikersinterface van onze toepassing maken, moeten we de nodige verkooppunten en acties aan het headerbestand van onze view controller toevoegen. Er moeten in totaal vier verkooppunten worden toegevoegd, UITextField
voor het invoeren van het bijschrift van de afbeelding, a UIImageView
weergeven van de afgebroken afbeelding en twee UIButton
instances. Als u op de eerste knop tikt, wordt de afbeelding en het bijschrift naar het Facebook-account van de gebruiker verzonden. Als u op de tweede knop tikt, wordt een instantie weergegeven van UIActivityViewController
, presentatie van de gebruiker met een aantal opties voor het delen van de afbeelding en bijschrift. Zoals je misschien al geraden hebt, is elke knop gebonden aan een IBAction
. Het codefragment hieronder laat zien hoe het headerbestand van onze view controller er uit moet zien:
#importeren#importeren @interface RPViewController: UIViewController @property (weak, nonatomic) IBOutlet UITextField * captionTextField; @property (weak, nonatomic) IBOutlet UIImageView * imageView; @property (weak, nonatomic) IBOutlet UIButton * facebookButton; @property (weak, nonatomic) IBOutlet UIButton * shareButton; - (IBAction) Facebook: (id) afzender; - (IBAction) delen: (id) afzender; @einde
Het is tijd om naar het XIB-bestand van onze view controller te gaan. Om de zaken eenvoudig te houden, zullen we de nieuwe iOS 6 Autolayout-functies niet in dit hoofdstuk gebruiken. Open het XIB-bestand van de weergavecontroller en open het Bestand Inspector aan de rechterkant en haal het vinkje weg Gebruik Autolayout checkbox.
Met het XIB-bestand van de view controller geselecteerd, begin je met het slepen van een tekstveld in de weergave van de view controller en plaats je het bovenaan het scherm (figuur 6). Configureer het tekstveld door het Kenmerken Inspector en verander zijn placeholder-tekst in Voer een onderschrift in. Met het tekstveld nog steeds geselecteerd, opent u de Verbindingen Inspecteur en verbind de tekstveld's delegeren stopcontact voor de Bestand eigenaar object aan de linkerkant. Dit betekent dat de view controller fungeert als de gedelegeerde van het tekstveld. De reden hiervoor wordt binnen enkele minuten duidelijk. Zorg ervoor dat u ook de captionTextField
Uitgang naar het tekstveldobject op het scherm.
Sleep een instantie van UIImageView
van de bibliotheek naar de weergave van de view controller en plaats deze onder het tekstveld (figuur 6). Wijzig de afmetingen tot 280 punten met 280 punten. Open de Kenmerken Inspector nogmaals en verander de modus van de beeldweergave (inhoudsmodus
) eigendom van Aspect Fit en zorg ervoor om te controleren Gebruikersinteractie ingeschakeld. Dit laatste is belangrijk omdat we binnenkort een tikgebaarherkenning aan de beeldweergave zullen toevoegen. Als we de interactie van de gebruiker voor de afbeeldingsweergave niet inschakelen, zal de tikgebaarherkenner niet werken. Vergeet niet het stopcontact van de view controller aan te sluiten op onze beeldweergave. De eenvoudigste manier om dit te doen, is door op te drukken Ctrl
sleutel, sleept u van de afbeeldingsweergave naar het object Eigenaar van het bestand en selecteert u het juiste verkooppunt.
Om de gebruikersinterface van onze applicatie af te ronden, voegt u er twee toe UIButton
exemplaren naar de mening van de controlecontroller en plaatst deze onder de afbeeldingweergave (figuur 6). Geef de bovenste knop een titel van Facebook en de onderste knop een titel van Delen. Sluit de resterende uitgangen aan zoals ik hierboven heb beschreven. Koppel bovendien de twee acties van onze weergavecontroller aan door op de Ctrl-toets te drukken, vanuit het object Eigenaar van het bestand naar elke knop te slepen en vervolgens de bijbehorende actie te selecteren. De gebruikersinterface is klaar. Nu is het tijd om wat code te schrijven om het allemaal te laten werken!
Er is nog een ding dat we moeten toevoegen aan het header-bestand van onze view controller. Daar gaan we gebruik van maken UIImagePickerController
om foto's te maken, moet onze view controller voldoen aan zowel de UINavigationControllerDelegate
en UIImagePickerControllerDelegate
protocols. Zoals ik een paar momenten geleden al heb vermeld, fungeert onze view-controller ook als de gedelegeerde van het veld voor ondertitelingstekst. Dit betekent dat de view controller zich moet conformeren aan de UITextFieldDelegate
protocol ook. Bekijk het bijgewerkte headerbestand van onze view controller voor verduidelijking.
#importeren#importeren @interface RPViewController: UIViewController @property (weak, nonatomic) IBOutlet UITextField * captionTextField; @property (weak, nonatomic) IBOutlet UIImageView * imageView; @property (weak, nonatomic) IBOutlet UIButton * facebookButton; @property (weak, nonatomic) IBOutlet UIButton * shareButton; - (IBAction) Facebook: (id) afzender; - (IBAction) delen: (id) afzender; @einde
In ons beeld van het implementatiebestand van de controller beginnen we met het uitbreiden van de klassendefinitie en het toevoegen van een privé-eigenschap. Het is een goede gewoonte om niet elke eigenschap van een klasse bloot te leggen door ze in het header-bestand te declareren. Een manier om dit te doen is door de klassendefinitie uit te breiden in het implementatiebestand. Na de eerste importinstructie en vóór de @implementatie
richtlijn, voeg het onderstaande codefragment toe om een nieuwe, privé-eigenschap te declareren. De eigenschap houdt een verwijzing in naar de afbeelding die de gebruiker maakt met de camera van het apparaat.
@interface RPViewController () @eigenschap (sterk, niet-atomisch) UIImage * -afbeelding; @einde
Een leuke functie van Xcode 4.4+ is dat je niet langer eigendomskenmerken moet samenvoegen. Dit wordt achter de schermen voor u gedaan en het volgt de naamconventies van Apple. In ons voorbeeld wordt een instantievariabele gemaakt met een naam van _beeld
en de accessors voor onze afbeeldingseigenschap worden automatisch voor ons gesynthetiseerd.
Ik begin altijd met het implementeren van de view-life-cycle van een view-controller. Daarnaast hou ik er ook de voorkeur aan om de viewDidLoad
methode kort door enkele hulpmethoden toe te voegen. Een methode die ik bijna altijd creëer is setupView
, die zorgt voor het instellen en configureren van de weergave van de weergavecontroller. Laten we eens kijken naar de viewDidLoad
en setupView
methoden om een idee te krijgen van wat ik bedoel.
- (void) viewDidLoad [super viewDidLoad]; // Setup Weergave [zelfinstelling bekijken]; - (ongeldig) setupView // Toevoegen Gesture Recognizer UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Updateweergave [self updateView];
Zoals u kunt zien, de setupView
methode is niet complex. We voegen een tikgebaarherkenning toe aan de afbeeldingsweergave zodat de gebruiker een afbeelding kan vastleggen door op de afbeeldingsweergave in onze gebruikersinterface te tikken. We initialiseren eerst een tikgebaarherkenning en voegen deze vervolgens toe aan onze beeldweergave. De tikgebaarherkenner verzendt het bericht snapImage:
naar onze weergavecontroller wanneer de gebruiker op de afbeeldingweergave tikt. We zullen een kijkje nemen naar de snapImage:
methode in slechts een seconde.
Aan het einde van de setupView
methode, roepen we de updateView-methode aan. Nogmaals, dit is een hulpmethode die ik heel vaak gebruik, omdat ik daardoor de logica kan groeperen die is gekoppeld aan het bijwerken van de weergave. Laten we even kijken naar de updateView
methode.
- (void) updateView BOOL sharingEnabled = self.image? JA NEE; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha;
Zoals de naam van de methode impliceert, werkt de methode eenvoudig de weergave en zijn subbeelden bij. We beginnen met het verifiëren of een afbeelding beschikbaar is door te controleren of onze afbeeldingseigenschap is ingesteld. Als we een afbeelding hebben om mee te werken, schakelen we de knoppen Facebook en delen in en stellen hun alpha-waarden in op 1.0. Als een afbeelding niet beschikbaar is, dat wil zeggen dat de gebruiker er nog geen heeft genomen, schakelen we beide knoppen uit en maken ze enigszins transparant om aan de gebruiker aan te geven dat de knoppen zijn uitgeschakeld.
Door gebruik te maken van UIImagePickerController
, foto's maken is een eenvoudig en duidelijk proces. Laten we beginnen met het onderzoeken van de snapImage:
methode die wordt aangeroepen door de tikgebaarherkenning wanneer de gebruiker op de afbeeldingsweergave tikt. Eerst een instantie van UIImagePickerController
wordt geïnitialiseerd en zijn gemachtigde wordt ingesteld op 'zelf', dat wil zeggen, onze view-controller. Vervolgens vragen we het besturingssysteem of een camera beschikbaar is door te bellen isSourceTypeAvailable
op de UIImagePickerController
klasse en doorgeven UIImagePickerControllerSourceTypeCamera
als het argument. Op basis van de retourwaarde stellen we het brontype in van onze UIImagePickerController
aanleg. Als failsafe is het brontype ingesteld op UIImagePickerControllerSourceTypePhotoLibrary
als er om wat voor reden dan ook geen camera beschikbaar is. Dit betekent dat de gebruiker een afbeelding uit de fotobibliotheek van het apparaat kan selecteren. Ten slotte wordt de controller voor de afbeeldingkiezer aan de gebruiker gepresenteerd.
- (void) takeImage: (UITapGestureRecognizer *) tgr // Initialiseer Image Picker Controller UIImagePickerController * ip = [[UIImagePickerController alloc] init]; // Set Delegate [ip setDelegate: self]; if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Brontype instellen op camera [ip setSourceType: UIImagePickerControllerSourceTypeCamera]; else // Brontype instellen op fotobibliotheek [ip setSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; // Present View Controller [self presentViewController: ip animated: YES completion: nil];
Kun je raden wat de volgende stap is? We moeten de methoden van de UIImagePickerControllerDelegate
protocol. Het protocol heeft twee methoden, imagePickerController: didFinishPickingMediaWithInfo:
en imagePickerControllerDidCancel:
. Laat me je door elke methode heenleiden.
In imagePickerController: didFinishPickingMediaWithInfo:
, we beginnen met het opslaan van een referentie naar de originele, onbewerkte afbeelding. In de volgende paar regels code, wijzen we de originele afbeelding toe aan onze afbeeldingseigenschap en werken we de weergave bij. Vergeet niet dat dit de knoppen Facebook en delen zal inschakelen. Ten slotte verwijderen we de image picker-controller.
- (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info UIImage * originalImage = [info objectForKey: UIImagePickerControllerOriginalImage]; if (originalImage) self.image = originalImage; // Updateweergave [self updateView]; // Verlaat Image Picker Controller [self dismissViewControllerGeanimeerd: YES completion: nil];
De tweede gedelegeerde methode bevat slechts één regel code. Als de gebruiker op de annuleerknop tikt, wordt de controller voor de afbeeldingenkiezer zonder meer ontslagen.
- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Dismiss Image Picker Controller [self dismissViewControllerGeanimeerd: YES completion: nil];
Voordat u de facebook:
en delen:
acties, ik wil een kleine omweg maken. Waarom hebben we de nieuw gehackte afbeelding niet toegewezen aan de afbeeldingseigenschap van het afbeeldingsoverzicht? Het toewijzen van de nieuwe afbeelding aan de afbeeldingseigenschap van onze beeldweergave is inderdaad een perfect haalbare optie, maar ik heb een andere benadering gekozen. Sinds de introductie van de @synthetiseren
richtlijn, mensen vergeten vaak hoe nuttig setters en getters kunnen zijn. Laat me uitleggen wat ik bedoel met een voorbeeld.
In onze voorbeeldtoepassing heb ik de instelling van de afbeeldingseigenschap van onze view controller opgeheven. Dit stelt me in staat om (1) groepsgerelateerde code op één locatie te plaatsen en (2) de beeldweergave alleen bij te werken wanneer de afbeelding verandert. Dit lijkt misschien een detail met heel weinig gebruik op dit punt, maar het laat zien hoe we onze code nu al op subtiele manieren kunnen optimaliseren, wat van invloed is op de leesbaarheid van de code en zelfs de prestaties. In dit specifieke voorbeeld heeft dit geen invloed op de prestaties van onze applicatie, maar het is goed om best practices te gebruiken wanneer u maar wilt.
Voeg nu het volgende toe aan het implementatiebestand:
- (void) setImage: (UIImage *) afbeelding if (_image! = afbeelding) _image = afbeelding; // Update Image View self.imageView.image = _image;
Voordat we kunnen beginnen met het delen van afbeeldingen, moeten we een gedelegeerde methode van de UITextFieldDelegate
protocol, dat is, textFieldShouldReturn:
. In deze gedelegeerde methode geven we het tekstveld op als de eerste responder als de gebruiker op de retourneerknop van het toetsenbord tikt. Hierdoor wordt het toetsenbord gesloten en worden de onderliggende knoppen eronder weergegeven.
- (BOOL) textFieldShouldReturn: (UITextField *) textField // Ontslag eerste antwoord [textField resignFirstResponder]; terugkeer JA;
Het is tijd om onze handen vuil te maken met het sociale raamwerk en UIActivityViewController
. Laten we beginnen met het implementeren van de facebook:
methode. Het zal illustreren hoe te gebruiken SLComposeViewController
. Bekijk de implementatie hieronder en laten we het stap voor stap afbreken.
- (IBAction) Facebook: (id) afzender if ([SLComposeViewController is beschikbaarVoorServiceType: SLServiceTypeFacebook]) // Initialize Compose View Controller SLComposeViewController * vc = [SLComposeViewController composeViewControllerForServiceType: SLServiceTypeFacebook]; // Compose View Controller configureren [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Presenteer Compose View Controller [self presentViewController: vc geanimeerd: YES completion: nil]; else NSString * message = @ "Het lijkt erop dat we op dit moment niet met Facebook kunnen praten of dat u uw Facebook-account nog niet aan dit apparaat hebt toegevoegd. Ga naar de toepassing Instellingen om uw Facebook-account aan dit apparaat toe te voegen."; UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ "Oops" -bericht: message delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show];
Zoals ik eerder al zei, is het nodig om te beginnen met het besturingssysteem te vragen of de service die we targeten beschikbaar is. Als isAvailableForServiceType:
komt terug NEE
, we geven een waarschuwingsweergave weer die de gebruiker vertelt wat het probleem kan zijn. Als de service beschikbaar is, initialiseren we echter een instantie van SLComposeViewController
door de klassemethode aan te roepen composeViewControllerForServiceType:
. Het argument dat we doorgeven aan de klassemethode is SLServiceTypeFacebook
, wat aangeeft dat we het Facebook-platform targeten.
Hoewel onze gebruiker het bericht kan aanpassen voordat het naar Facebook wordt verzonden, vullen we het bericht met de inhoud van het veld met ondertitelingstekst en voegen we de afgebroken afbeelding toe aan het bericht. Ten slotte presenteren we de compose view-controller aan de gebruiker. Het is dan aan de gebruiker om het bericht te bewerken, annuleren of plaatsen. De gebruiker heeft de controle. Dit is belangrijk om te onthouden, vooral met het volgende hoofdstuk in gedachten, waarbij de gebruiker niet altijd weet wat onze applicatie achter de schermen doet. In deze fase is onze applicatie klaar om getest te worden. Bouw en run uw applicatie op een testapparaat en probeer het zelf uit!
Zoals ik eerder al zei, is een van de sterke punten van het sociale raamwerk hoe gemakkelijk het is om een sociaal netwerk te vervangen door een ander door het servicetype te veranderen. Laten we dit proberen door de twee instanties van te vervangen SLServiceTypeFacebook
met SLServiceTypeTwitter
. Met deze eenvoudige wijziging kunnen we onze afbeeldingen nu delen met onze Twitter-volgers.
Onze applicatie is nog niet helemaal af. We moeten nog steeds het delen:
methode. In deze methode maken we gebruik van de UIActivityViewController
klasse om de snapped image en het bijbehorende bijschrift te delen. Bekijk de implementatie van de methode hieronder.
- (IBAction) delen: (id) afzender // Activiteititems UIImage * image = self.image; NSString * caption = self.captionTextField.text; NSArray * activityItems = @ [afbeelding, bijschrift]; // Initialize Activity View Controller UIActivityViewController * vc = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities: nil]; // Presentat