Как включить масштабирование для изображений в Apple Watch

У меня есть приложение для iOS с приложением Apple Watch. То, что я делаю с решением, показывает диаграмму трендов (линейный график), которая рисуется в приложении iOS и отправляется в приложение для просмотра. Я использую экземпляр WKInterfaceImage для отображения графика в приложении Apple Watch, но он не выглядит ясным. Есть ли способ включить масштабирование для изображений в приложении, чтобы пользователь мог масштабировать и читать / видеть детали из диаграммы четко.

Проверьте текущее графическое изображение у меня в приложении для часов,

введите описание изображения здесь

Я не уверен, возможно ли что-то подобное, о чем я просил, но если нет, то может ли кто-нибудь предложить мне лучшие варианты, чтобы реализовать это лучше.

2 ответа

Решение

В настоящее время нет способа разрешить пользователю "увеличивать" в WatchKit SDK. Вместо этого я бы предложил, чтобы вы генерировали изображения графиков в размере, более удобном для чтения на часах.

Во-первых, я рекомендую не генерировать UIImage в приложении iOS и отправлять его на расширение Watch, так как при отправке изображения (т.е. NSData) намного больше данных, чем просто отправка координат точек графа.

Чтобы нарисовать график понятным способом, я рекомендую создать CGContext, используя UIGraphicsBeginImageContextWithOptions с точным размером, который вы получите от contentFrame собственностью WKInterfaceController и шкала 2, потому что дисплей часов всегда 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.

Другие вопросы по тегам