Grundlagen des sozialen Rahmens

Erfahren Sie, wie Sie die Macht des sozialen Rahmens in diesem Beitrag aus Kapitel 11 des Buches Mobiletuts + nutzen können Dekodieren des iOS 6 SDK!


Die Einführung des Twitter-Frameworks in iOS 5 war der erste Schritt zur Integration von iOS in beliebte soziale Netzwerke. In iOS 6 hat Apple das Social Framework eingeführt. Das Social-Framework ersetzt nicht nur das Twitter-Framework effektiv, es erweitert auch die Funktionalität, indem es Unterstützung für Facebook und Sina Weibo hinzufügt.

Obwohl das Twitter-Framework ab iOS 6 nicht mehr verwendet wird, ist es glücklicherweise eine triviale Aufgabe, vorhandenen Code vom Twitter-Framework zum Social-Framework zu migrieren. In den APIs des sozialen Rahmens werden bestimmte soziale Netzwerke nicht erwähnt. Die Netzwerkkomponente wurde abstrahiert, was die Unterstützung neuer sozialer Netzwerke in der Zukunft zu einer schmerzlosen Aufgabe macht. Fazit: Die gute Nachricht für Entwickler ist, dass der Einstieg in das Social-Framework einfach ist, besonders wenn Sie bereits mit dem Twitter-Framework vertraut sind.

In diesem Kapitel werde ich Ihnen einen Überblick über den sozialen Rahmen und dessen Möglichkeiten geben und Ihnen zeigen, welche Möglichkeiten Sie haben, wenn Sie Ihren Anwendungen eine soziale Komponente hinzufügen möchten. In diesem Kapitel werden zwar nur die Grundlagen des sozialen Rahmens behandelt, im nächsten Kapitel wird jedoch auf eine gründlichere Integration Ihrer Anwendung in den sozialen Rahmen eingegangen. Als zusätzlichen Bonus werde ich auch die UIActivityViewController-Klasse besprechen. Dies ist eine weitere Ergänzung zu UIKit, die das Teilen von Inhalten zum Kinderspiel macht!


Theoretische Übersicht

Vor iOS 6 war das Teilen von Inhalten nicht so einfach. Wenn Sie jemals Facebook mit einer iOS-Anwendung integriert haben, sind Sie sicherlich mit einer Reihe von Hürden in Berührung gekommen. In iOS 6 wurden jedoch einige bedeutende Verbesserungen vorgenommen. Ab iOS 6 ist die Integration mit sozialen Netzwerken nun in das Betriebssystem eingebettet, was Social-Sharing für SDK-Entwickler erheblich vereinfacht.

Zur Zeit des Schreibens unterstützt das soziale Rahmenwerk die Integration mit Facebook, Sina Weibo und Twitter. Die Unterstützung für Twitter ist der offensichtliche Grund für die Abwertung des Twitter-Frameworks. Sina Weibo könnte für einige von Ihnen die seltsame Ente in der Reihe sein. Sina Weibo ist eine äußerst beliebte Plattform für Microblogging in China, einer der bevölkerungsreichsten Nationen der Erde. Daher ist es nicht sonderbar, die Integration in iOS zu sehen.

Inhalte teilen

Welche Optionen haben Sie in Anbetracht dessen, wenn eine Ihrer Anwendungen in Facebook, Twitter oder Sina Weibo integriert werden muss? Der soziale Rahmen bietet zwei Möglichkeiten: (1) die SLComposeViewController Klasse oder (2) die SLAnfrage Klasse. Wenn Sie in iOS 5 mit dem Twitter-Framework gearbeitet haben, werden diese Klassennamen mit Sicherheit klingeln.

In diesem Kapitel werde ich das vergrößern SLComposeViewController Klasse. Es ist eine benutzerfreundliche und elegante Lösung, mit der Ihre Benutzer Inhalte mit Twitter, Facebook und Sina Weibo teilen können. Werfen wir einen Blick auf diesen Neuankömmling.

SLComposeViewController

Der einfachste Weg, um Inhalte mit einem der unterstützten sozialen Netzwerke zu teilen, ist die Verwendung der SLComposeViewController Klasse. Sein Präfix SL weist darauf hin, dass es Teil des sozialen Rahmens ist. Das SLComposeViewController Klasse ist das Äquivalent von TWTweetComposeViewController Klasse des Twitter-Frameworks. Der wichtigste Unterschied ist das SLComposeViewController ist nicht an ein bestimmtes soziales Netzwerk gebunden.

Eine Instanz von erstellen SLComposeViewController ist so einfach wie anrufen composeViewControllerForServiceType: in der Klasse und Weitergabe des Diensttyps, dh des sozialen Netzwerks, auf das Sie abzielen. Zum Zeitpunkt des Schreibens gibt es drei Möglichkeiten, SLServiceTypeTwitter, SLServiceTypeFacebook, und SLServiceTypeSinaWeibo.

Sie können das konfigurieren SLComposeViewController Beispiel, indem Sie den Anfangstext festlegen oder ein Bild oder einen Link hinzufügen. Konfigurieren der SLComposeViewController Die Instanz ist ein optionaler Schritt, da der Benutzer den Inhalt der Nachricht ändern kann, bevor er sie an den Zieldienst sendet.

Bevor Sie dem Benutzer den Compose-View-Controller präsentieren, sollten Sie den Completion-Handler (SLComposeViewControllerCompletionHandler). Letzteres ist ein Block, der ausgeführt wird, wenn die Anforderung an den Dienst erfolgreich oder nicht erfolgreich abgeschlossen wurde. Der Block benötigt einen Parameter, das Ergebnis der Anforderung. Dies kann nützlich sein, wenn Sie den Benutzer darüber informieren möchten, ob die Anforderung erfolgreich war oder nicht.

Vorstellung der SLComposeViewController an den Benutzer erfolgt durch Senden einer Nachricht von presentViewController: animiert: genau wie bei jedem anderen (modalen) View-Controller. Wie bereits erwähnt, kann der Benutzer die Nachricht noch bearbeiten, die Nachricht mit Geotags versehen oder ein Bild oder einen Link hinzufügen. Die Optionen sowie die Benutzeroberfläche des SLComposeViewController Instanz hängen von dem Dienst ab, der anvisiert wird. Wenn der Nutzer beispielsweise eine Nachricht an Facebook sendet, wird die modale Ansicht der angezeigt SLComposeViewController Beispiel ist mit der bekannten violetten Farbgebung geschmückt.

Das SLComposeViewController Klasse hat eine andere erwähnenswerte Klassenmethode, isAvailableForServiceType:. Der TWTweetComposeViewController hat einen ähnlichen Klassenmethodennamen, canSendTweet. Mit dieser Methode kann Ihre Anwendung das Betriebssystem fragen, ob der gewünschte Dienst verfügbar ist. Wie bei composeViewControllerForServiceType, Die Klassenmethode akzeptiert einen Diensttyp, der angibt, auf welchen Dienst das Ziel ausgerichtet ist. Obwohl isAvailableForServiceType: kehrt zurück JA oder NEIN, Das Betriebssystem führt eine Reihe von Überprüfungen für Sie im Hintergrund durch. Es wird überprüft, ob das soziale Netzwerk erreichbar ist, und vor allem wird überprüft, ob der Benutzer ein gültiges Konto für den Zieldienst installiert hat. Schauen wir uns die Benutzerkonten genauer an und wie sie vom Betriebssystem verwaltet werden.

Soziale Netzwerkkonten

Der soziale Rahmen nimmt ein Konzept an, das als bekannt ist Einmalige Anmeldung (SSO), und es ist wichtig, die Auswirkungen dieser Entwurfsentscheidung zu verstehen. Vereinfacht gesagt, es ist nicht mehr notwendig, dass sich jede Drittanbieteranwendung beim Zielservice authentifiziert. Das Betriebssystem kümmert sich jetzt um Sie und stellt den Entwicklern eine Reihe von Endpunkten über das Social-Framework zur Verfügung. Wie Sie vielleicht schon erraten haben, bedeutet dies, dass ein zentraler Ort zum Speichern der Konten des Benutzers erforderlich ist. Dieser zentrale Speicherort ist natürlich die Anwendung "Einstellungen" von iOS. Wenn Benutzer ihre sozialen Netzwerkdetails in den Einstellungen verwalten können, ist das Teilen von Inhalten innerhalb von Apps wesentlich effizienter.

Während die Anwendung iOS 6 Settings nur die Möglichkeit bietet, ein Facebook-Konto zu verwalten, können Benutzer mehrere Twitter-Konten steuern. Durch das Speichern der Benutzerkonten an einem zentralen Ort müssen Entwickler von Fremdanwendungen diese sensiblen Daten nicht mehr selbst verwalten.


Abbildung 1
Figur 2

UIActivityViewController

UIActivityViewController ist eine wunderbare Ergänzung zu UIKit. Das Teilen von Inhalten wird zum Kinderspiel. Wie der Klassenname andeutet, UIActivityViewController ist eine Unterklasse von UIViewController. UIActivityViewController macht das Teilen von Inhalten trivial, indem dem Benutzer eine Reihe von Optionen zur Auswahl angeboten wird. Der Benutzer kann Inhalte per E-Mail oder Twitter teilen oder einfach eine URL in die Zwischenablage einfügen. Es gibt viele Optionen zur Auswahl, und die Endpunkte sind nicht auf die drei sozialen Netzwerke beschränkt, die vom sozialen Rahmen unterstützt werden. Als die UIActivityViewController name impliziert, dass die Klasse Teil von UIKit ist, nicht der soziale Rahmen. Mit anderen Worten, es besteht keine Notwendigkeit, Ihr Projekt mit dem sozialen Rahmen zu verknüpfen, wenn Sie nur das verwenden möchten UIActivityViewController Klasse.

Obwohl UIActivityViewController Ich bin nicht Teil des sozialen Rahmens. Ich habe mich entschieden, ihn in dieses Kapitel aufzunehmen, da er einige Gemeinsamkeiten mit dem sozialen Rahmen aufweist. In der Tat werden Sie dies in wenigen Augenblicken bemerken UIActivityViewController teilt mit SLComposeViewController einiges an Funktionalität. Um besser zu verstehen UIActivityViewController , Sie könnten es mit einem Postamt vergleichen. Ein Postamt nimmt Ihre Nachricht entgegen und stellt sicher, dass sie an die von Ihnen angegebene Adresse (den Dienst oder den Endpunkt) übermittelt wird.

Einige von Ihnen stellen möglicherweise fest, dass es etwas mit der bekannten Open Source-Bibliothek zu tun hat ShareKit. UIActivityViewController ist viel leistungsfähiger, da es sich nahtlos in das Betriebssystem und seine Dienste integriert. Wie bei ShareKit können Entwickler jedoch dem Array von Endpunkten benutzerdefinierte Endpunkte hinzufügen UIActivityViewController integriert sich in und zeigt sie dem Benutzer an.

Verwenden UIActivityViewController ist genauso einfach wie die Verwendung von SLComposeViewController. Der angegebene Initialisierer von UIActivityViewController nimmt zwei Parameter an, (1) Aktivitätselemente und (2) Anwendungsaktivitäten. Beide Argumente müssen Instanzen von NSArray sein. Der erste Parameter ist ein Array von Datenobjekten, die Sie freigeben möchten. Das Array kann ein oder mehrere Textausschnitte oder nur ein einzelnes Bild enthalten. Die Art des Inhalts, den Sie freigeben können, hängt nicht nur davon ab, welche Art von Daten Ihre Anwendung bereitstellen kann, sondern auch, welche Art von Daten der Endpunkt akzeptiert. Das UIActivityViewController class sorgt dafür, dass die Datenobjekte in Abhängigkeit von dem vom Benutzer ausgewählten Dienst oder Endpunkt korrekt verarbeitet werden.

Der zweite Parameter, Anwendungsaktivitäten, ist ein Array von Diensten oder Endpunkten UIActivityViewController wird dem Benutzer präsentiert. Die Services umfassen E-Mail, Twitter, Facebook, Drucken oder Kopieren von Objekten in die Zwischenablage. Wie bereits erwähnt, haben Entwickler die Möglichkeit, Services hinzuzufügen. Wenn Anwendungsaktivitäten auf Null gesetzt sind, verwendet das Betriebssystem die Standard-Anwendungsaktivitäten.

Nach der Vorstellung der UIActivityViewController Instanz an den Benutzer, UIActivityViewController kümmert sich um den Rest. Zum Beispiel, wenn Sie Twitter als Anwendungsaktivität hinzugefügt haben, UIActivityViewController prüft zunächst, ob Twitter verfügbar ist und ob der Benutzer einen Twitter-Account auf seinem Gerät installiert hat, bevor er ihn dem Endbenutzer als Option präsentiert. UIActivityViewController Das erspart Ihnen viele Kopfschmerzen, und für die Integration in eine Anwendung sind nur wenige Codezeilen erforderlich.


Tutorial-Projekt

Projektaufbau

Um zu zeigen, wie einfach es ist, es zu benutzen UIActivityViewController und SLComposeViewController, Wir werden eine einfache Schuhkartonanwendung erstellen, um Fotos zu teilen. Mit der Anwendung können Benutzer ein Bild aufnehmen, eine Bildunterschrift hinzufügen und mit Freunden und Verwandten teilen. Die Beispielanwendung zeigt Ihnen, wie einfach es ist, Inhalte in iOS 6 dynamisch gemeinsam zu nutzen.

Erstellen Sie zunächst ein neues Projekt in Xcode. Wähle aus Einzelansicht-Anwendung Vorlage aus der Liste der Vorlagen (Figur 3). Benennen Sie Ihre Anwendung als Sharetastic, geben Sie einen Firmennamen und eine Kennung ein, stellen Sie das iPhone für die Gerätefamilie ein und überprüfen Sie es Verwenden Sie die automatische Referenzzählung. Deaktivieren Sie die verbleibenden Kontrollkästchen für dieses Projekt (Figur 4). Legen Sie fest, wo Sie das Projekt speichern möchten, und klicken Sie auf Erstellen Taste.


Figur 3
Figur 4

Hinzufügen des sozialen Rahmens

Da unsere Anwendung den sozialen Rahmen nutzen wird, müssen wir ihn in unser Projekt aufnehmen. Wählen Sie das Projekt in der Projektnavigator und wähle das Ziel rechts aus (Abbildung 5). Wähle aus Baue Phasen Tab oben, öffnen Sie die Binäres mit Bibliotheken verknüpfen Klicken Sie in der Schublade auf das Pluszeichen und wählen Sie Sozialer Rahmen von der Liste (Abbildung 5). Unser Projekt ist jetzt erfolgreich mit dem sozialen Rahmen verknüpft.


Abbildung 5

Vergessen Sie nicht, eine Importanweisung oben in der Header-Datei unseres View-Controllers hinzuzufügen, um die Header des Social-Frameworks in Ihr Projekt zu importieren.

 #einführen  #einführen 

Outlets und Aktionen

Bevor Sie die Benutzeroberfläche unserer Anwendung erstellen, müssen Sie die erforderlichen Auslässe und Aktionen zur Header-Datei unseres View-Controllers hinzufügen. Es müssen insgesamt vier Auslässe hinzugefügt werden, a UITextField zur Eingabe der Bildunterschrift, a UIImageView Anzeigen des Bildausschnitts und zwei UIButton Instanzen. Durch Antippen der ersten Schaltfläche werden das Bild und die Bildunterschrift an das Facebook-Konto des Benutzers gesendet. Durch Tippen auf die zweite Schaltfläche wird eine Instanz von angezeigt UIActivityViewController, Dem Benutzer werden eine Reihe von Optionen zum Teilen des Bildes und der Bildunterschrift angezeigt. Wie Sie vielleicht schon erraten haben, ist jeder Button an einen IBAction. Das folgende Codefragment zeigt, wie die Header-Datei unseres View-Controllers aussehen sollte:

 #einführen  #einführen  @interface RPViewController: UIViewController @property (schwach, nicht atomar) IBOutlet UITextField * captionTextField; @ property (schwach, nichtatomisch) IBOutlet UIImageView * imageView; @ property (schwach, nichtatomisch) IBOutlet UIButton * facebookButton; @ property (schwach, nichtatomisch) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) Absender; - (IBAction) -Freigabe: (ID) Absender; @Ende

Benutzeroberfläche

Es ist Zeit, zur XIB-Datei unseres View-Controllers überzugehen. Der Einfachheit halber werden wir die neuen Funktionen von iOS 6 Autolayout in diesem Kapitel nicht verwenden. Öffnen Sie bei ausgewählter XIB-Datei des View-Controllers die Dateiinspektor auf der rechten Seite und deaktivieren Sie die Verwenden Sie Autolayout Kontrollkästchen.

Wenn die XIB-Datei des View-Controllers ausgewählt ist, ziehen Sie zunächst ein Textfeld in die Ansicht des View-Controllers und positionieren Sie es ganz oben in der Ansicht (Abbildung 6). Konfigurieren Sie das Textfeld durch Öffnen von Attribute-Inspektor und ändern Sie den Platzhaltertext in Geben Sie die Beschriftung ein. Öffnen Sie, während das Textfeld noch ausgewählt ist Verbindungsinspektor und verbinden Sie das Textfeld delegieren ausgang zum Eigentümer der Datei Objekt auf der linken Seite. Dies bedeutet, dass der View Controller als Delegat des Textfelds fungiert. Der Grund dafür wird in wenigen Minuten klar. Stellen Sie sicher, dass Sie auch die Verbindung hergestellt haben captionTextField Ausgang zum Textfeldobjekt auf dem Bildschirm.


Abbildung 6

Ziehen Sie eine Instanz von UIImageView von der Bibliothek zur Ansicht des View-Controllers und positionieren Sie sie unter dem Textfeld (Abbildung 6). Ändern Sie die Abmessungen auf 280 Punkte um 280 Punkte. Öffne das Attribute-Inspektor noch einmal und ändern Sie den Modus der Bildansicht (Inhaltsmodus) Eigentum an Aspect Fit und stellen Sie sicher, dass Sie überprüfen Benutzerinteraktion aktiviert. Letzteres ist wichtig, da wir der Bildansicht in Kürze eine Tap-Gestenerkennung hinzufügen werden. Wenn wir keine Benutzerinteraktion für die Bildansicht aktivieren, funktioniert die Antippen-Gestenerkennung nicht. Vergessen Sie nicht, die Steckdose des View Controllers mit unserer Bildansicht zu verbinden. Am einfachsten geht dies durch Drücken der Taste Ctrl , indem Sie aus der Bildansicht auf das Objektobjekt der Datei ziehen und den entsprechenden Ausgang auswählen.

Um die Benutzeroberfläche unserer Anwendung abzuschließen, fügen Sie zwei hinzu UIButton Instanzen in der Ansicht unseres View-Controllers und positionieren sie unter der Bildansicht (Abbildung 6). Geben Sie der obersten Schaltfläche einen Titel Facebook und der unterste Knopf einen Titel von Aktie. Schließen Sie die übrigen Steckdosen wie oben beschrieben an. Verbinden Sie außerdem die beiden Aktionen unseres View-Controllers, indem Sie die Strg-Taste drücken, vom Eigentümerobjekt der Datei auf jede Schaltfläche ziehen und dann die entsprechende Aktion auswählen. Die Benutzeroberfläche ist fertig. Nun ist es an der Zeit, Code zu schreiben, damit alles funktioniert!

Delegation

In der Header-Datei unseres View-Controllers müssen wir noch etwas hinzufügen. Da werden wir davon Gebrauch machen UIImagePickerController Um Bilder einzufangen, muss unser Ansichtscontroller den beiden entsprechen UINavigationControllerDelegate und UIImagePickerControllerDelegate Protokolle. Darüber hinaus fungiert unser View-Controller, wie ich vor einigen Momenten erwähnt habe, auch als Delegierter des Untertitel-Textfelds. Das bedeutet, dass der View Controller dem entsprechen muss UITextFieldDelegate Protokoll auch. Sehen Sie sich die aktualisierte Header-Datei unseres View-Controllers zur Verdeutlichung an.

 #einführen  #einführen  @Interface RPViewController: UIViewController  @ property (schwach, nichtatomisch) IBOutlet UITextField * captionTextField; @ property (schwach, nichtatomisch) IBOutlet UIImageView * imageView; @ property (schwach, nichtatomisch) IBOutlet UIButton * facebookButton; @ property (schwach, nichtatomisch) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) Absender; - (IBAction) -Freigabe: (ID) Absender; @Ende

Das wichtigste zuerst

In der Implementierungsdatei unseres View-Controllers erweitern wir zunächst die Klassendefinition und fügen eine private Eigenschaft hinzu. Es wird empfohlen, nicht jede Eigenschaft einer Klasse verfügbar zu machen, indem Sie sie in der Header-Datei deklarieren. Eine Möglichkeit besteht darin, die Klassendefinition in der Implementierungsdatei zu erweitern. Nach der ersten Importanweisung und vor dem @Implementierung Direktive, fügen Sie den folgenden Code-Ausschnitt hinzu, um eine neue, private Eigenschaft zu deklarieren. Die Eigenschaft enthält einen Verweis auf das Bild, das der Benutzer mit der Kamera des Geräts erstellt.

 @interface RPViewController () @property (stark, nicht atomar) UIImage * image; @Ende

Eine gute Funktion von Xcode 4.4+ ist, dass Sie keine Eigenschaftszugriffsobjekte mehr synthetisieren müssen. Dies wird für Sie im Hintergrund erledigt und folgt den Namenskonventionen von Apple. In unserem Beispiel wird eine Instanzvariable mit dem Namen von erstellt _Bild und die Accessoren für unser Bildeigentum werden für uns automatisch synthetisiert.

Lebenszyklus anzeigen

Ich beginne immer gerne mit der Implementierung des View-Lebenszyklus eines View-Controllers. Außerdem ziehe ich es auch vor, das zu behalten viewDidLoad Methode kurz durch Hinzufügen einiger Hilfsmethoden. Eine Methode, die ich fast immer schaffe, ist SetupView, Hier wird die Ansicht des View-Controllers eingerichtet und konfiguriert. Werfen wir einen Blick auf die viewDidLoad und SetupView Methoden, um eine Vorstellung davon zu bekommen, was ich meine.

 - (void) viewDidLoad [super viewDidLoad]; // Setup-Ansicht [self setupView];  - (void) setupView // Gestenerkennung hinzufügen UITapGestureRecognizer * tgr = [[UITapGestureRecognizer-Zuordnung] initWithTarget: Selbstaktion: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Ansicht aktualisieren [self updateView]; 

Wie Sie sehen können, die SetupView Methode ist nicht komplex. Wir fügen der Bildansicht eine Berührungsgestenerkennung hinzu, sodass der Benutzer ein Bild aufnehmen kann, indem Sie auf die Bildansicht in unserer Benutzeroberfläche tippen. Wir initialisieren zunächst eine Tap-Gestenerkennung und fügen sie anschließend unserer Bildansicht hinzu. Die Tippgestenerkennung sendet die Nachricht snapImage: zu unserem View-Controller, wenn der Benutzer die Bildansicht antippt. Wir werden uns das ansehen snapImage: Methode in nur einer Sekunde.

Am Ende von SetupView Methode rufen wir die updateView-Methode auf. Auch dies ist eine Hilfsmethode, die ich sehr häufig verwende, da ich damit die mit dem Aktualisieren der Ansicht verknüpfte Logik gruppieren kann. Werfen wir einen kurzen Blick auf die updateView Methode.

 - (void) updateView BOOL sharingEnabled = self.image? JA NEIN; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha; 

Wie der Methodenname impliziert, aktualisiert die Methode einfach die Ansicht und ihre Unteransichten. Wir beginnen mit der Überprüfung, ob ein Bild verfügbar ist, indem wir prüfen, ob unsere Bildeigenschaft festgelegt ist. Wenn wir mit einem Bild arbeiten können, aktivieren wir die Facebook- und Share-Schaltflächen und setzen deren Alpha-Werte auf 1,0. Wenn ein Bild nicht verfügbar ist, das heißt, der Benutzer hat noch kein Bild aufgenommen, deaktivieren wir beide Schaltflächen und machen sie etwas transparent, um den Benutzer darauf hinzuweisen, dass die Schaltflächen deaktiviert sind.

Ein Bild aufnehmen

Durch die Nutzung von UIImagePickerController , Das Einrasten von Bildern ist ein einfacher und unkomplizierter Vorgang. Beginnen wir mit der Untersuchung der snapImage: Methode, die von der Antippen-Gestenerkennung aufgerufen wird, wenn der Benutzer auf die Bildansicht tippt. Zuerst eine Instanz von UIImagePickerController wird initialisiert und sein Delegat wird auf self gesetzt, dh auf unseren View-Controller. Als nächstes fragen wir das Betriebssystem, ob eine Kamera verfügbar ist isSourceTypeAvailable auf der UIImagePickerController Klasse und Weitergabe UIImagePickerControllerSourceTypeCamera als das Argument. Basierend auf dem Rückgabewert legen wir den Quelltyp unseres fest UIImagePickerController Beispiel. Aus Sicherheitsgründen ist der Quellentyp auf gesetzt UIImagePickerControllerSourceTypePhotoLibrary Wenn aus irgendeinem Grund keine Kamera verfügbar ist. Dies bedeutet, dass der Benutzer ein Bild aus der Fotobibliothek des Geräts auswählen kann. Schließlich wird die Bildaufnehmersteuerung dem Benutzer präsentiert.

 - (void) takeImage: (UITapGestureRecognizer *) tgr // Initialisieren Sie den Image Picker Controller UIImagePickerController * ip = [[UIImagePickerController Alloc] init]; // Set Delegate [ip setDelegate: self]; if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Setzt den Quellentyp auf Kamera [ip setSourceType: UIImagePickerControllerSourceTypeCamera];  else // Legen Sie den Quelltyp auf Fotobibliothek fest [ip setSourceType: UIImagePickerControllerSourceTypePhotoLibrary];  // Present View Controller [selbst presentViewController: ip animiert: JA Abschluss: nil]; 

Können Sie sich vorstellen, was der nächste Schritt ist? Wir müssen die Methoden des implementieren UIImagePickerControllerDelegate Protokoll. Das Protokoll hat zwei Methoden, imagePickerController: didFinishPickingMediaWithInfo: und imagePickerControllerDidCancel:. Lassen Sie mich durch jede Methode gehen.

Im imagePickerController: didFinishPickingMediaWithInfo:, Zunächst speichern wir einen Verweis auf das ursprüngliche, nicht editierte Bild. In den nächsten Codezeilen ordnen wir unserer Eigenschaft image das Originalbild zu und aktualisieren die Ansicht. Denken Sie daran, dass Facebook und Schaltflächen freigegeben werden. Schließlich entlassen wir den Image Picker Controller.

 - (void) imagePickerController: (UIImagePickerController *) - Auswahlelement didFinishPickingMediaWithInfo: (NSDictionary *) info UIImage * originalImage = [infoForKey: UIImagePickerControllerOriginalImage]; if (originalImage) self.image = originalImage; // Ansicht aktualisieren [self updateView];  // Image Picker Controller entfernen [self dismissViewControllerAnimated: YES completion: nil]; 

Die zweite Delegatmethode enthält nur eine Codezeile. Wenn der Benutzer auf die Schaltfläche "Abbrechen" tippt, wird die Bildauswahlsteuerung ohne weiteres abgebrochen.

 - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Deaktivieren des Image Picker-Controllers [self dismissViewControllerAnimated: YES completion: nil]; 

Details zum Thema

Vor der Implementierung des Facebook: und Aktie: Aktionen möchte ich einen kleinen Umweg machen. Warum haben wir das neu gerasterte Bild nicht der Bildeigenschaft der Bildansicht zugewiesen? Die Zuweisung des neu eingefangenen Bildes zur Bildeigenschaft unserer Bildansicht ist in der Tat eine durchaus praktikable Option, aber ich habe einen anderen Ansatz gewählt. Seit der Einführung des @ synthetisieren Direktive, die Leute vergessen oft, wie nützlich Setter und Getter sein können. Lassen Sie mich mit einem Beispiel erklären, was ich meine.

In unserer Beispielanwendung habe ich den Setter der image-Eigenschaft unseres View-Controllers überschrieben. Auf diese Weise kann ich (1) bezogenen Code an einem Ort gruppieren und (2) die Bildansicht nur aktualisieren, wenn sich das Bild ändert. Dies mag an dieser Stelle wie ein Detail aussehen, das zu diesem Zeitpunkt nur wenig Nutzen bringt, zeigt jedoch, wie wir bereits jetzt mit der Optimierung unseres Codes auf subtile Weise beginnen können, was sich auf die Lesbarkeit des Codes und sogar auf die Leistung auswirkt. In diesem Beispiel hat dies keinen Einfluss auf die Leistung unserer Anwendung. Es empfiehlt sich jedoch, Best Practices anzuwenden, wenn Sie dies für richtig halten.

Fügen Sie der Implementierungsdatei jetzt Folgendes hinzu:

 - (void) setImage: (UIImage *) image if (_image! = image) _image = image; // Bildansicht aktualisieren self.imageView.image = _image; 

UITextFieldDelegate

Bevor wir mit dem Freigeben von Bildern beginnen können, müssen wir eine Delegatmethode des implementieren UITextFieldDelegate Protokoll, das ist, textFieldShouldReturn:. Bei dieser Delegatenmethode geben wir das Textfeld als ersten Antwortdienst zurück, wenn der Benutzer auf die Zurück-Schaltfläche der Tastatur tippt. Dadurch wird die Tastatur geschlossen und die darunter liegenden Share-Buttons angezeigt.

 - (BOOL) textFieldShouldReturn: (UITextField *) textField // Resign First Responder [textField resignFirstResponder]]; JA zurückgeben; 

Lass uns teilen

Es ist an der Zeit, uns mit dem sozialen Rahmen und den Händen die Hände zu schmutzigen UIActivityViewController. Beginnen wir mit der Implementierung von Facebook: Methode. Es wird die Verwendung veranschaulichen SLComposeViewController. Schauen Sie sich die Implementierung unten an und lassen Sie uns Schritt für Schritt aufschlüsseln.

 - (IBAction) facebook: (id) sender if ([SLComposeViewController isAvailableForServiceType: SLServiceTypeFacebook]) // Initialisieren Sie Compose View Controller. SLComposeViewController * vc = [SLComposeViewController composeViewControllerForServiceTypeFacebook]; // Configure Compose View Controller konfigurieren [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Present Compose View Controller präsentieren [self presentViewController: vc animiert: JA Abschluss: nil];  else NSString * message = @ "Es scheint, dass wir momentan nicht mit Facebook sprechen können oder Sie haben Ihr Facebook-Konto noch nicht zu diesem Gerät hinzugefügt. Gehen Sie zur Anwendung" Einstellungen ", um Ihr Facebook-Konto zu diesem Gerät hinzuzufügen."; UIAlertView * alertView = [[UIAlertView-Zuordnung] initWithTitle: @ "Oops" -Meldung: Nachrichtendelegierte: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; 

Wie ich bereits erwähnt habe, muss zunächst das Betriebssystem gefragt werden, ob der gewünschte Dienst verfügbar ist. Ob isAvailableForServiceType: kehrt zurück NEIN, Wir zeigen eine Warnmeldung an, die den Benutzer über das Problem informiert. Wenn der Dienst verfügbar ist, initialisieren wir jedoch eine Instanz von SLComposeViewController durch Aufrufen der Klassenmethode composeViewControllerForServiceType:. Das Argument, das wir an die Klassenmethode übergeben, lautet SLServiceTypeFacebook, Dies zeigt an, dass wir die Facebook-Plattform als Ziel haben.

Auch wenn unser Benutzer die Nachricht vor dem Senden an Facebook ändern kann, füllen wir die Nachricht mit dem Inhalt des Textfelds für die Beschriftung auf und hängen das gerasterte Bild an die Nachricht an. Zum Schluss stellen wir dem Benutzer den Compose-View-Controller vor. Es ist dann Sache des Benutzers, die Nachricht zu bearbeiten, abzubrechen oder zu veröffentlichen. Der Benutzer hat die Kontrolle. Dies ist vor allem im Hinblick auf das nächste Kapitel wichtig, wenn der Benutzer nicht immer weiß, was unsere Anwendung hinter den Kulissen tut. Zu diesem Zeitpunkt ist unsere Anwendung zum Testen bereit. Erstellen und starten Sie Ihre Anwendung auf einem Testgerät und probieren Sie es selbst aus!

Twitter, Facebook oder Sina Weibo

Wie ich bereits erwähnt habe, besteht eine der Stärken des sozialen Rahmens darin, wie einfach es ist, ein soziales Netzwerk durch ein anderes durch Ersetzen des Diensttyps zu ersetzen. Versuchen wir dies, indem wir die beiden Instanzen von ersetzen SLServiceTypeFacebook mit SLServiceTypeTwitter. Mit dieser einfachen Änderung können wir unsere Bilder jetzt mit unseren Twitter-Followern teilen.

Teilen auf Steroiden

Unsere Bewerbung ist noch nicht ganz fertig. Wir müssen das noch umsetzen Aktie: Methode. In dieser Methode verwenden wir die UIActivityViewController Klasse, um das gerasterte Bild und die zugehörige Beschriftung ge