Ошибка маскировки дисплея iOS - PullRequest
3 голосов
/ 21 февраля 2011

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

[UIImage imageNamed:@"filename.png"]

Я предоставил как стандартное изображение, так и изображение сетчатки с именами filename.png и filename@2x.png.

Проблема возникаетпри выборе маски для выбранной области.Код прекрасно работает с ресурсами с низким разрешением и основным ресурсом с высоким разрешением, но когда я использую

CGImageCreateWithImageInRect

и указываю прямоугольник, внутри которого я хочу создать изображение, масштаб изображения увеличивается, что означает, чтоРазрешение основной кнопки в порядке, но изображение, которое возвращается и накладывается на нажатие кнопки, не является правильным разрешением, но странным образом масштабируется до удвоенной плотности пикселей, что выглядит ужасно.

Я пробовал оба

    UIImage *img2 = [UIImage imageWithCGImage:cgImg scale:[img scale] orientation:[img imageOrientation]];
    UIImage *scaledImage = [UIImage imageWithCGImage:[img2 CGImage] scale:4.0 orientation:UIImageOrientationUp];

И мне кажется, что я ничего не получаю, когда беру изображение и рисую. InRect: (Выбранный Rect)

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

1 Ответ

16 голосов
/ 21 февраля 2011

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

- (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect {
rect.size.height = rect.size.height * [image scale];
rect.size.width = rect.size.width * [image scale];
rect.origin.x = rect.origin.x * [image scale];
rect.origin.y = rect.origin.y * [image scale];
CGImageRef sourceImageRef = [image CGImage];
CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[image scale] orientation:[image imageOrientation]];
CGImageRelease(newImageRef);
return newImage;
}

Это должно исправить тех, у кого есть похожие проблемы с отображением.

...