xcode и спрайт лист, как обрезать изображение, когда несколько изображений существуют на одном листе - PullRequest
3 голосов
/ 27 февраля 2012

Я знаю, что это делается с помощью веб-программирования, может ли это быть также с xcode и obj-c?У меня есть спрайт лист с двумя экземплярами кнопки (обычный и нажал).Я знаю, что могу использовать функцию щелчка в obj-c, но могу ли я импортировать один лист спрайтов и обрезать часть листа спрайтов (как на веб-сайтах), чтобы обрезать нужную часть изображения на одном листе спрайтов?Если да, то какие функции нужны, и есть ли у вас примеры, на которые вы можете мне указать?

1 Ответ

0 голосов
/ 28 февраля 2012

Вы можете использовать CALayer для этого: он легче, чем UIImageView, и очень прост в использовании.Идея основана на примерах из этого поста и взята из рабочего проекта.

    // "sprites.png" is a 192x128 picture containing two rows of three 64x64 sprites each
    NSString *path = [[NSBundle mainBundle] pathForResource:@"sprites.png" ofType:nil];
    CGImageRef img = [UIImage imageWithContentsOfFile:path].CGImage;
    imgLayer = [CALayer layer];
    imgLayer.contents = (__bridge id)img;
    // Frame defines the position of your sprite inside your view
    imgLayer.frame = CGRectMake(horOffset, verOffset, 64, 64);
    imgLayer.bounds = CGRectMake(0, 0, 64, 64); // The size of an individual sprite
    // Pick the sprite from the top row, left column
    imgLayer.contentsRect = CGRectMake(0, 0, 1.0/3.0, 1.0/2.0);
    // Top row, middle column
    // imgLayer.contentsRect = CGRectMake(1.0/3, 0, 1.0/3.0, 1.0/2.0);
    // Top row, right column
    // imgLayer.contentsRect = CGRectMake(2.0/3, 0, 1.0/3.0, 1.0/2.0);
    // Bottom row, left column
    // imgLayer.contentsRect = CGRectMake(0, 1.0/2, 1.0/3.0, 1.0/2.0);
    // Bottom row, middle column
    // imgLayer.contentsRect = CGRectMake(1.0/3, 1.0/2, 1.0/3.0, 1.0/2.0);
    // Bottom row, right column
    // imgLayer.contentsRect = CGRectMake(2.0/3, 1.0/2, 1.0/3.0, 1.0/2.0);
    [self.layer addSublayer:imgLayer];
...