Во-первых, я рекомендую не генерировать UIImage в приложении iOS и отправлять его в Watch Extension, потому что отправка изображения (т.е. NSData
) — это намного больше данных, чем просто отправка координат точек графика.
Чтобы нарисовать график в понятной форме, я рекомендую создать CGContext, используя UIGraphicsBeginImageContextWithOptions
с точно таким же размером, который вы получаете из свойства contentFrame
WKInterfaceController
, и масштабом 2, потому что дисплей Watch всегда Retina. См. этот пример:
CGSize size = self.contentFrame.size;
if (size.width > 150)
size.height = 99; // 42mm
else
size.height = 87; // 38mm
[self.graphImage setHeight:size.height];
DLog(@"drawing graph into size %@", NSStringFromCGSize(size));
UIGraphicsBeginImageContextWithOptions(size, NO, 2);
[graph drawRect:CGRectMake(0, 0, size.width, size.height)]; // draw something
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.graphImage setImage:image];
Я использую этот код с взглядом, поэтому мне нужно иметь определенную высоту в соответствии с шаблонами взгляда. Я устанавливаю высоту WKInterfaceImage
вручную, чтобы убедиться, что он имеет тот же размер, что и UIImage, чтобы избежать масштабирования и, следовательно, дизеринга. Кажется, это работает, но немного грязно из-за чисел с фиксированной точкой.
Обратите внимание, что 42-миллиметровые часы дают вам ширину contentFrame
в 156 точек, а 38-миллиметровые — 136 точек, поэтому вам лучше взять эти ширины из contentFrame
на случай, если они изменятся в будущей WatchOS.
person
bio
schedule
19.05.2015