2015-07-11 13 views
13

Ich erstelle eine App, die einen QR-Code verwendet, um Benutzer zu verbinden, ähnlich wie Snapchat es Benutzern ermöglicht, sich gegenseitig auf Snapchat hinzuzufügen.Wie kann ich ein Bild erzeugen, das Snapchats Snapcode ähnelt und auf die gleiche Weise verwendet wird?

Ich hatte gehofft, eine ästhetisch ansprechende Alternative zum QR-Code zu verwenden, etwas ähnlich Snapchat Snapcode. Irgendeine Idee, wie es in einer iOS-Anwendung gemacht werden kann?

+0

Just checking in, wie das ging. Ist es dir gelungen, Snapcode etwas ähnlicher zu machen als die folgende Lösung? – Chaz

+0

Hallo Rohan hast du Lösung auf diesem ich möchte das gleiche bauen. –

+0

Haben Sie etwas Rohan gefunden? – hyd00

Antwort

3

Wenn Sie nicht QRCode an allen verwenden möchten, müssen Sie ein eigenes Muster erstellen, um das Bild zu generieren/lesen.

Aber vielleicht können Sie QRCode verwenden.

QRCode hat eine error correction level. Wenn man es in Betracht zieht, kann man seinen QRCode immer noch ästhetischer gestalten, wenn man danach fragt. Denken Sie nur daran "Je höher die Fehlerkorrekturstufe, desto weniger Speicherkapazität" und Sie können Ihr Bild anpassen, solange der Algorithmus die benötigten Informationen erhalten kann.

Wenn Sie das QRCode Bildmotiv zu erzeugen können Sie es wie folgt tun:

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 
}