Ich habe eine Menge im Internet gesucht, aber ich versuche gerade mit "Live Photos" in Playground zu arbeiten. Ich kenne den Rahmen (PHLivePhoto), ich habe nur keine Ahnung, ob die Arbeit mit ihnen in Playground möglich ist, aufgrund der Tatsache, dass es nicht viel zu "importieren" gibt, da es anscheinend keine "Live Photos" gibt zum Herunterladen online. Irgendwelche Ideen?Arbeiten mit Live-Fotos auf dem Spielplatz
Antwort
Es ist möglich, ein PHLivePhoto auf dem Spielplatz aus den Elementen eines tatsächlichen Live-Fotos zu erstellen und anzuzeigen.
In O Photos
App X, wählen Sie ein Live Photo und geht zum Menü
Datei> Exportieren> Export original ...
Es hat ein .JPG
schaffen und a .mov
.
Legen Sie diese beiden Dateien in den Ordner Resources
des Playgrounds (Menü Ansicht> Navigatoren> Projektnavigator anzeigen).
die URLs mit NSBundle
für diese beiden Dateien erhalten (in meinem Beispiel die Dateien „IMG_0001.JPG“ und „IMG_0001.mov“):
let imgURL = NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "JPG")!
let movURL = NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "mov")!
Und ein tatsächliches Bild erstellen, werden wir es brauchen für die Live-Fotobildvorschau:
let prevImg = UIImage(named: "IMG_0001.JPG")!
importieren Sie die notwendigen Rahmenbedingungen:
import Photos
import PhotosUI
import XCPlayground
Und der Spielplatz im asynchronen Modus eingestellt:
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
Jetzt werden wir PHLivePhoto
‚s requestLivePhotoWithResourceFileURLs
Methode eine PHLivePhoto unserer Elemente zu erstellen:
func makeLivePhotoFromItems(imageURL: NSURL, videoURL: NSURL, previewImage: UIImage, completion: (livePhoto: PHLivePhoto) -> Void) {
PHLivePhoto.requestLivePhotoWithResourceFileURLs([imageURL, videoURL], placeholderImage: previewImage, targetSize: CGSizeZero, contentMode: PHImageContentMode.AspectFit) {
(livePhoto, infoDict) -> Void in
// for debugging: print(infoDict)
if let lp = livePhoto {
completion(livePhoto: lp)
}
}
}
Dann wir so nennen:
makeLivePhotoFromItems(imgURL, videoURL: movURL, previewImage: prevImg) { (livePhoto) -> Void in
// "livePhoto" is your PHLivePhoto object
}
zum Beispiel lassen Sie uns sagen, dass Sie die Spielplatz wollen eine Live-Ansicht machen:
Da es keine Möglichkeit gibt, mit der Live-Ansicht zu interagieren, um die Wiedergabe des Live-Fotos zu starten, müssen wir es selbst mit der startPlaybackWithStyle
Methode machen.
Sie können die Live-Ansicht zwingen, die im Spielplatz erscheinen, indem Sie den Assistant Editor in Menü zeigt
Ansicht> Assistant Editor> Show Assistant Editor
Hinweis: Es kann einige Zeit dauern, bis der Playground PHLivePhoto erstellt und die Live-Ansicht initiiert.
Mit Xcode 7.3b + können wir endlich einige UI-Interaktion in Spielplätze haben.
import UIKit
import XCPlayground
import Photos
import PhotosUI
class PLView: UIView {
let image: UIImage
let imageURL: NSURL
let videoURL: NSURL
let liveView: PHLivePhotoView
init(image: UIImage, imageURL: NSURL, videoURL: NSURL) {
self.image = image
self.imageURL = imageURL
self.videoURL = videoURL
let rect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
self.liveView = PHLivePhotoView(frame: rect)
super.init(frame: rect)
self.addSubview(self.liveView)
}
func prepareLivePhoto() {
makeLivePhotoFromItems { (livePhoto) in
self.liveView.livePhoto = livePhoto
print("\nReady! Click on the LivePhoto in the Assistant Editor panel!\n")
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("\nClicked! Wait for it...\n")
self.liveView.startPlaybackWithStyle(.Full)
}
private func makeLivePhotoFromItems(completion: (PHLivePhoto) -> Void) {
PHLivePhoto.requestLivePhotoWithResourceFileURLs([imageURL, videoURL], placeholderImage: image, targetSize: CGSizeZero, contentMode: .AspectFit) {
(livePhoto, infoDict) -> Void in
// This "canceled" condition is just to avoid redundant passes in the Playground preview panel.
if let canceled = infoDict[PHLivePhotoInfoCancelledKey] as? Int where canceled == 0 {
if let livePhoto = livePhoto {
completion(livePhoto)
}
}
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let plview = PLView(image: UIImage(named: "IMG_0001.JPG")!,
imageURL: NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "JPG")!,
videoURL: NSBundle.mainBundle().URLForResource("IMG_0001", withExtension: "mov")!)
XCPlaygroundPage.currentPage.liveView = plview
plview.prepareLivePhoto()
Das gleiche Beispiel für Swift 3.0.2 (Xcode:
Ich habe eine Anpassung dieser Antwort mit einem einfachen Blick und touchesBegan, klicken Sie einfach auf die LivePhoto, wenn die Konsole sagt so gemacht 8.2.1):
import UIKit
import PlaygroundSupport
import Photos
import PhotosUI
class PLView: UIView {
let image: UIImage
let imageURL: URL
let videoURL: URL
let liveView: PHLivePhotoView
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(image: UIImage, imageURL: URL, videoURL: URL) {
self.image = image
self.imageURL = imageURL
self.videoURL = videoURL
let rect = CGRect(x: 0, y: 0, width: 300, height: 400)
self.liveView = PHLivePhotoView(frame: rect)
super.init(frame: rect)
self.addSubview(self.liveView)
}
func prepareLivePhoto() {
makeLivePhotoFromItems { (livePhoto) in
self.liveView.livePhoto = livePhoto
print("\nReady! Click on the LivePhoto in the Assistant Editor panel!\n")
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("\nClicked! Wait for it...\n")
self.liveView.startPlayback(with: .full)
}
private func makeLivePhotoFromItems(completion: @escaping (PHLivePhoto) -> Void) {
PHLivePhoto.request(withResourceFileURLs: [imageURL, videoURL], placeholderImage: image, targetSize: CGSize.zero, contentMode: .aspectFit) {
(livePhoto, infoDict) -> Void in
if let canceled = infoDict[PHLivePhotoInfoCancelledKey] as? NSNumber,
canceled == 0,
let livePhoto = livePhoto
{
completion(livePhoto)
}
}
}
}
let plview = PLView(image: UIImage(named: "IMG_0001.JPG")!,
imageURL: Bundle.main.url(forResource: "IMG_0001", withExtension: "JPG")!,
videoURL: Bundle.main.url(forResource: "IMG_0001", withExtension: "mov")!)
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = plview
plview.prepareLivePhoto()
- 1. Animationen arbeiten nicht in ios Spielplatz
- 2. Welche Pakete können auf dem Go-Spielplatz importiert werden?
- 3. mit dem Objekt arbeiten
- 4. Arbeiten mit dem `MonadBaseControl` API
- 5. Spiegel API Spielplatz
- 6. Spielplatz für künstliche Intelligenz?
- 7. Image Resizer nicht auf dem Server arbeiten
- 8. NSUserDefaults in iOS-Spielplatz
- 9. Mit dem Visual Fox Pro arbeiten OleDb
- 10. Unerwartete führende Unterstriche mit Babel's Spielplatz
- 11. Swift Spielplatz ist nicht installiert
- 12. UIView in Spielplatz
- 13. Spielplatz zeigt keine Ergebnisse
- 14. Swift Spielplatz Ausführung Geschwindigkeit
- 15. Objective-C Spielplatz?
- 16. Regexp Spielplatz oder nicht
- 17. Arbeiten mit dem PHP Während Kontrollstruktur
- 18. $ Parser nicht mit dem Raum arbeiten
- 19. Wie Zählwert erhalten Arbeiten mit dem Zustand
- 20. Mit dem Ausgabecache und anderen Aktionsfiltern arbeiten
- 21. Border-Radius nicht mit dem Bild arbeiten
- 22. Rekursives Abrufen einer Verbindung wird von Relay abgelehnt. Reproduzierbar auf dem Relais Spielplatz
- 23. Arbeiten mit GPIO auf bcm2836
- 24. CustomView sieht in meinem Projekt seltsam aus, aber gut auf dem Spielplatz
- 25. Spielplatz Xcode: Fehler Sandbox-Erweiterung
- 26. Wie kann ich eine Drittanbieter-Bibliothek verwenden: SWXMLHash auf dem Spielplatz?
- 27. Hat jemand die "etwas" -Ausgabe auf dem Spielplatz gesehen, als er Diktaturen benutzte?
- 28. Gradle Aufgabe für Java Spielplatz
- 29. UImage Rendering nicht in Xcode 6.3.1 Spielplatz
- 30. Swift Spielplatz Ergebnis falsche Position
Es funktioniert ziemlich gut, ein paar Sekunden und ein wenig Verzögerung zu laden, aber sonst alles gut :) – Idris
dies auf jeden Fall einen meines favoriten e Antworten auf Stack-Überlauf, obwohl Code möglicherweise nicht mit Swift 3.0.2 funktioniert, schien Apple einige Änderungen mit Live-Foto (? – XueYu
@XueYu Ah, danke. ^^ Ich habe ein Update gemacht, jetzt funktioniert es: Ich musste Int in NSNumber für den PHLivePhotoInfoCancelledKey Wert ändern und die Größe der Vorschau reduzieren, um das Ganze zu beschleunigen. – Moritz