WatchKit:图片未显示

时间:2015-03-04 07:25:31

标签: ios watchkit wkinterfaceimage

以下是代码:

@interface InterfaceController()
@property (nonatomic, weak) IBOutlet WKInterfaceImage *qrImage;
@property (nonatomic, weak) IBOutlet WKInterfaceLabel *label;
@end

@implementation InterfaceController
- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];
    [self.label setText: @"Welcome"];
    UIImage *image = [InterfaceController generateQRCodeWithString:@"Welcome"];
    [self.qrImage setImage:image];
}

- (void)willActivate {
    [super willActivate];
}

- (void)didDeactivate {
    [super didDeactivate];
}

+ (UIImage *)generateQRCodeWithString:(NSString *)string {
    NSData *stringData = [string dataUsingEncoding:NSUTF8StringEncoding];
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [filter setValue:stringData forKey:@"inputMessage"];
    [filter setValue:@"M" forKey:@"inputCorrectionLevel"];

    CIImage *input = filter.outputImage;
    CGAffineTransform transform = CGAffineTransformMakeScale(10.0f, 10.0f);
    CIImage *output = [input imageByApplyingTransform: transform];

    return [UIImage imageWithCIImage:output];
}
@end

我尝试从某些特定文本生成QR码并在监视界面中显示。问题是generateQRCodeWithString:生成的UIImage从未显示过。但是,如果我从WatchKit Extension包中加载[UIImage imageNamed:@"XXX.png"]的图像,则表明它已正确显示。

我不确定发生了什么。我错过了什么?提前谢谢。


更新:回应msk,是的,我很确定。我试图NSLog图像,它给出了<UIImage: 0x7fc261d276e0>, {230, 230}

1 个答案:

答案 0 :(得分:2)

generateQRCodeWithString:返回的图片不是真实的&#34;图像(简短)并且还没有完全呈现出来。可以将CIImage视为图像应该是什么样子而不是实际像素的概念。

用以下内容替换return中的generateQRCodeWithString:行:

CGImageRef cgOutput = [[CIContext contextWithOptions:nil]
                       createCGImage:output fromRect:output.extent];
return [UIImage imageWithCGImage:cgOutput];

这会将QR码渲染为CGImage,将其转换为像素,然后转换为UIImage

创建CIContext相对昂贵,如果您要生成大量QR码,则上下文应该是静态的,或者初始化一次。但对于一次性,它应该没问题。