2011-01-15 2 views
0

Я разработал приложение для игры в плитку для iPhone 3. В котором я взял изображение из своего ресурса и разделил его на количество плиток, используя функцию CGImageCreateWithImageInRect (originalImage.CGImage, frame);.Retina дисплей изображений-iPhone от 3 до 4

Он отлично работает на всех iPhone, но теперь я хочу, чтобы он работал и на Retina Displays.

Так как в соответствии с this link Я взял изображение с размером, вдвое превышающим текущий размер изображения, и переименуйте его, добавив суффикс @ 2x. Но проблема в том, что она занимает только верхнюю половину изображения изображения сетчатки. Я думаю, что из-за рамки, которую я установил при использовании CGImageCreateWithImageInRect. Итак, что будет сделано в отношении этой работы.

Любая помощь будет действительно оценена.

Заранее спасибо ...

ответ

1

Проблема, вероятно, что масштаб изображения @ 2x только автоматически настроен для определенных инициализаторов из UIImage ... Try loading your UIImages using code like this from 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);

+0

Я тоже пробовал, но не получал шкалу == 2.0. Я попробовал это в симуляторе. –

+0

Кроме того, не применяя это, я принимал свое изображение с именем как @ 2x в качестве суффикса. Но теперь, поскольку указанное выше условие не совпадает с тем, что я не принимаю свое изображение @ 2x вообще –

+0

Я отредактировал свой ответ - разместите немного своего кода, если он не работает, и я постараюсь помочь. –

0

Вот как я получил его на работу в приложении, которое я сделал:

//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], чтобы выяснить, насколько большой прямоугольник вы должны нарезать.

+0

, так что вы хотите сказать, что если бы я принимал кусочек 100x100 в iPhone 3, для отображения сетчатки мне нужно взять кусочек 200x200? Это так? –

+0

Пробный ур код, но он делает плитки больше, следовательно, приводит к выходу плиток из экрана :( –

+0

@hAPPY iCODER - о, нет. Это для разрезания UIImage, будь то myImage.png или [email protected] –

Смежные вопросы