2015-07-11 16 views
13

Sto costruendo un'app che utilizza un codice QR per connettere gli utenti, in modo simile a come Snapchat consente agli utenti di aggiungersi a vicenda su Snapchat.Come posso generare un'immagine che sarà simile allo Snapchat Snapcode e verrà utilizzata allo stesso modo?

Speravo di usare un'alternativa più esteticamente gradevole al codice QR, qualcosa di simile allo Snapcode di Snapchat. Qualche idea su come può essere fatto in un'applicazione iOS?

+0

Proprio il check-in su come questo è andato. Sei riuscito a creare qualcosa di più simile allo snapcode rispetto all'utilizzo della soluzione di seguito? – Chaz

+0

Hi Rohan hai trovato la soluzione su questo voglio costruire lo stesso. –

+0

Hai trovato qualcosa Rohan? – hyd00

risposta

3

Se non si desidera utilizzare QRCode in tutti i, è necessario creare il proprio modello per generare/leggere l'immagine.

Ma forse è possibile utilizzare codice QR.

QRCode ha un error correction level. Considerando che puoi ancora rendere il tuo QRCode più esteticamente gradevole come richiesto. Basta tenere a mente "Più alto è il livello di correzione degli errori, minore è la capacità di archiviazione" e puoi personalizzare l'immagine finché l'algoritmo può ottenere le informazioni di cui hai bisogno.

Quando si sta generando l'immagine QRCode si può fare in questo modo:

Swift 3,1

private enum InputCorrectionLevel: String { 
    case low = "L" // 7% 
    case medium = "M" // 15% 
    case high = "Q" // 25% 
    case ultra = "H" // 30% 
} 

private enum QRCodeGenerationError { 
    case initializingFilter 
    case applyingFilter 
} 

func qrCode(from string: String, withSize frameSize: CGSize) throws -> CIImage { 
    guard let filter = CIFilter(name: "CIQRCodeGenerator") else { 
     throw QRCodeGenerationError.initializingFilter 
    } 

    let data = string.data(using: .isoLatin1, allowLossyConversion: false) 
    filter.setValue(data, forKey: "inputMessage") 
    filter.setValue(InputCorrectionLevel.low.rawValue, forKey: "inputCorrectionLevel") 

    guard let outputImage = filter.outputImage else { 
     throw QRCodeGenerationError.applyingFilter 
    } 

    let scaleX = frameSize.width/outputImage.extent.size.width 
    let scaleY = frameSize.height/outputImage.extent.size.height 
    let qrCodeCIImage = outputImage.applying(CGAffineTransform(scaleX: scaleX, y: scaleY)) 
    return qrCodeCIImage 
}