Сетчатка отображения изображений-витона от 3 до 4
-
11-10-2019 - |
Вопрос
Я разработал приложение плитки для iPhone 3., в котором я взял изображение из своего ресурса и разделил его на количество плиток, использующих CGImageCreateWithImageInRect ( originalImage.CGImage, frame );
функция
Это прекрасно работает на всех iPhone, но теперь я хочу, чтобы он также работал на дисплеях сетчатки.
Итак, в соответствии с эта ссылка Я взял изображение Anothe с его размером в два раза по размеру текущих изображений и переименовал его, добавив суффикс @2x. Но проблема в том, что он занимает только верхнюю половину части изображения дисплея сетчатки. Я думаю, это из -за рамки, которую я установил во время использования CGImageCreateWithImageInRect
. Анкет Итак, что будет сделано в отношении этой работы.
Любая помощь будет очень оценена.
Заранее спасибо...
Решение
Проблема, вероятно, что шкала изображения @2x автоматически настроена только для определенных инициализаторов Uiimage ... Попробуйте загрузить UIIMages, используя код, подобный этому, из Tasty Pixel. Запись по этой ссылке больше говорит об этой проблеме.
С использованием UIImage+TPAdditions
Категория по ссылке, вы реализуете это так (после того, как убедитесь, что изображения и их аналоги @2x находятся в вашем проекте):
NSString *baseImagePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *myImagePath = [baseImagePath stringByAppendingPathComponent:@"myImage.png"]; // note no need to add @2x.png here
UIImage *myImage = [UIImage imageWithContentsOfResolutionIndependentFile:myImagePath];
Тогда вы сможете использовать CGImageCreateWithImageInRect(myImage.CGImage, frame);
Другие советы
Вот как я заставил его работать в приложении, которое я сделал:
//this is a method that takes a UIImage and slices it into 16 tiles (GridSize * GridSize)
#define GridSize 4
- (void) sliceImage:(UIImage *)image {
CGSize imageSize = [image size];
CGSize square = CGSizeMake(imageSize.width/GridSize, imageSize.height/GridSize);
CGFloat scaleMultiplier = [image scale];
square.width *= scaleMultiplier;
square.height *= scaleMultiplier;
CGFloat scale = ([self frame].size.width/GridSize)/square.width;
CGImageRef source = [image CGImage];
if (source != NULL) {
for (int r = 0; r < GridSize; ++r) {
for (int c = 0; c < GridSize; ++c) {
CGRect slice = CGRectMake(c*square.width, r*square.height, square.width, square.height);
CGImageRef sliceImage = CGImageCreateWithImageInRect(source, slice);
if (sliceImage) {
//we have a tile (as a CGImageRef) from the source image
//do something with it
CFRelease(sliceImage);
}
}
}
}
}
Хитрость заключается в использовании -[UIImage scale]
Свойство, чтобы выяснить, насколько велик прямо, вы должны нарезать.