Ios 如何更改Objective-C中二维码的颜色?

Ios 如何更改Objective-C中二维码的颜色?,ios,objective-c,swift,qr-code,Ios,Objective C,Swift,Qr Code,我在swift语言中找到了太多的答案,但在Objective-C中却找不到。我很难将swift转换成Objective-C 以下是我的二维码生成代码: CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"]; [filter setDefaults]; NSData *data =

我在swift语言中找到了太多的答案,但在Objective-C中却找不到。我很难将swift转换成Objective-C 以下是我的二维码生成代码:

    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"];
[filter setDefaults];
NSData *data = [[VizsafeCommonUtil trimWhiteSpaceAndNewLine:Globals.instance.uuid] dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"];

CIImage *outputImage = [filter outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *image = [UIImage imageWithCGImage:cgImage scale:1. orientation:UIImageOrientationUp];
// Resize without interpolating
UIImage *resized = [self resizeImage:image withQuality:kCGInterpolationNone rate:5.0];
self.imageView.image = resized;
CGImageRelease(cgImage);  

- (UIImage *)resizeImage:(UIImage *)image withQuality:(CGInterpolationQuality)quality rate:(CGFloat)rate {
        UIImage *resized = nil;
        CGFloat width = image.size.width * rate;
        CGFloat height = image.size.height * rate;

        UIGraphicsBeginImageContext(CGSizeMake(width, height));
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSetInterpolationQuality(context, quality);
        [image drawInRect:CGRectMake(0, 0, width, height)];
        resized = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        return resized;
    }
我在swift中找到了一些与我的实现相关的代码。如果有人能帮我把下面的代码转换成Objective-C,那将非常有帮助

func generateQRCode(from string: String) -> UIImage? {
let data = string.data(using: String.Encoding.utf8)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
    guard let colorFilter = CIFilter(name: "CIFalseColor") else { return nil }

    filter.setValue(data, forKey: "inputMessage")

    filter.setValue("H", forKey: "inputCorrectionLevel")
    colorFilter.setValue(filter.outputImage, forKey: "inputImage")
    colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1") // Background white
    colorFilter.setValue(CIColor(red: 1, green: 0, blue: 0), forKey: "inputColor0") // Foreground or the barcode RED
    guard let qrCodeImage = colorFilter.outputImage
        else {
            return nil
    }
    let scaleX = imgQRCode.frame.size.width / qrCodeImage.extent.size.width
    let scaleY = imgQRCode.frame.size.height / qrCodeImage.extent.size.height
    let transform = CGAffineTransform(scaleX: scaleX, y: scaleY)


    if let output = colorFilter.outputImage?.applying(transform) {
        return UIImage(ciImage: output)
    }
}
return nil
}  
有人能帮我把上面的代码转换成Objective-C吗


提前感谢。

目标-我的问题的C版本:

- (void)generateQRCode:(NSString *)userStatus {
    NSData *data = [[VizsafeCommonUtil trimWhiteSpaceAndNewLine:Globals.instance.uuid] dataUsingEncoding:NSUTF8StringEncoding];
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"];

    [filter setDefaults];

    [filter setValue:data forKey:@"inputMessage"];
    [filter setValue:@"H" forKey:@"inputCorrectionLevel"];
    [colorFilter setValue:filter.outputImage forKey:@"inputImage"];
    if ([userStatus isEqualToString:@"pass"]) {
        [colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"];
        [colorFilter setValue:[CIColor colorWithRed:0 green:1 blue:0] forKey:@"inputColor0"];
        [self.btnMyHealthPass setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
    } else if ([userStatus isEqualToString:@"fail"]) {
        [colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"];
        [colorFilter setValue:[CIColor colorWithRed:1 green:0 blue:0] forKey:@"inputColor0"];
        [self.btnMyHealthPass setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    } else {
        [colorFilter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor1"];
        [colorFilter setValue:[CIColor colorWithRed:0 green:0 blue:0] forKey:@"inputColor0"];
        [self.btnMyHealthPass setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    }
    //CIImage *outputImage = [filter outputImage];
    CIImage *outputImage = [colorFilter outputImage];
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *image = [UIImage imageWithCGImage:cgImage scale:1. orientation:UIImageOrientationUp];
    // Resize without interpolating
    UIImage *resized = [self resizeImage:image withQuality:kCGInterpolationNone rate:5.0];
    self.imageView.image = resized;
    CGImageRelease(cgImage);
}

似乎您只需要翻译以下行:filter.setValueH,forKey:inputCorrectionLevel;colorFilter.setValuefilter.outputImage,forKey:inputImage;colorFilter.setValueCIColorred:1,绿色:1,蓝色:1,forKey:inputColor1//背景白色;colorFilter.setValueCIColorred:1,绿色:0,蓝色:0,forKey:inputColor0它们在Objective-C中与您的非常相似[filter setValue:data forKey:@inputMessage];filter和colorFilter对你来说似乎是一样的…好的,这个保护是什么?保护让someVar==someother{return},意思是如果someVar==nil{return};我强烈建议您学习一点Swift,对于类似的情况,您需要翻译。没那么难。只是理解它的意思,不需要写出来。@Larme ok明白了。当然,我会开始学习斯威夫特。非常感谢。