2017-02-25 5 views
1

Ich versuche, ein Remote-Bild in einen MTLTexture mit diesem Code zu laden,Legen Sie ein Remote-Bild mit MTKTextureLoader

let textureLoader = MTKTextureLoader(device: device) 
    textureLoader.newTexture(withContentsOf: url, options: options) { [weak self] (texture, error) in 
     if let t = texture { 
      completion(t) 
     } else { 
      if let desc = error?.localizedDescription { 
       NSLog(desc) 
      } 
      completion(nil) 
     } 
    } 

Wenn die URL von einem Bundle Ressource kommt, dann funktioniert es, z.B.

let url = Bundle.main.url(forResource: name, withExtension: ext) 

aber es schlägt fehl, wenn ich so etwas wie dies passieren,

let url = URL(string: "http://example.com/images/bla_bla.jpg") 

Mit diesem Fehler

Could not find resource bla_bla.jpg at specified location. 

Wenn ich kopieren und einfügen die URL in den Browser, das Bild ohne Probleme angezeigt (plus ich habe das gleiche in Android mit OpenGL implementiert und das Bild rendert OK).

Ich habe meine Domain der Info.plist hinzugefügt, und ich kann Dinge wie Json von diesem Ort laden. Es ist nur die Textur loader lustig zu sein ... Info.plist wie folgt aussieht,

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <false/> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>example.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSTemporaryExceptionMinimumTLSVersion</key> 
      <string>TLSv1.1</string> 
     </dict> 
    </dict> 
</dict> 

Die MTKTextureLoader documentation nichts über externen URLs erwähnen, aber es könnte sein, dass es nur interne Ressourcen behandelt?

Antwort

3

Hier ist ein Beispiel für die Erweiterung MTKTextureLoader zum Laden von Remote-URLs, die von der Standardimplementierung nicht unterstützt werden.

Idealerweise würden Sie Ihren eigenen Caching-Mechanismus implementieren, um das wiederholte Herunterladen desselben Images zu vermeiden, aber dies sollte Ihnen den Einstieg erleichtern.

+0

Perfekt! Das hat wie ein Zauber funktioniert! Danke :) Der nächste Schritt verhindert Abstürze beim Laden von Bildern, die breiter als 8192 Pixel sind. Ich denke, ich sollte versuchen, sie zuerst zu skalieren. – endavid

Verwandte Themen