WatchKit: изображение не отображается
Вот коды:
@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-код из определенного текста и показать его в интерфейсе часов. Проблема в том, что UIImage генерируется generateQRCodeWithString:
никогда не показывается. Тем не менее, если я загружаю изображение с [UIImage imageNamed:@"XXX.png"]
из пакета расширения WatchKit, он отображается правильно.
Я не уверен, что происходит. Что я упустил? Заранее спасибо.
ОБНОВЛЕНИЕ: В ответ на msk, да, я почти уверен. Я попытался NSLog изображение, оно дает <UIImage: 0x7fc261d276e0>, {230, 230}
1 ответ
Изображение вернулось из generateQRCodeWithString:
не является "реальным" изображением (если быть кратким) и не было полностью обработано. Думать о CIImage
как концепция того, как должно выглядеть изображение, а не как фактические пиксели.
Заменить return
линия в generateQRCodeWithString:
с чем-то вроде этого:
CGImageRef cgOutput = [[CIContext contextWithOptions:nil]
createCGImage:output fromRect:output.extent];
return [UIImage imageWithCGImage:cgOutput];
Это сделает код QR для CGImage
чтобы превратить его в пиксели, а затем на UIImage
,
Создание CIContext
это относительно дорого, и если вы генерируете много QR-кодов, контекст должен быть статическим или чем-то и инициализироваться один раз. Но для разового, это должно быть хорошо.