Подтвердить что ты не робот

Как добавить Stretchable UIImage в CALayer.contents?

У меня есть CALayer, и я хочу добавить к нему растяжимое изображение. Если я просто сделаю:

        _layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage;

он не будет работать, поскольку контент по умолчанию contentGravity - kCAGravityResize.

Я читал, что это может быть достигнуто с помощью contentCenter, но я не могу понять, как именно я буду использовать это для достижения растянутого изображения в моем CALayer.

Любые идеи приветствуются!

Horatiu

4b9b3361

Ответ 1

Ответ на этот вопрос таков. Допустим, у вас есть растяжимое изображение, которое растягивается только по ширине и имеет фиксированную высоту (для простоты).

Изображение шириной 31px (фиксированный размер 15px - не растягивается - 1px будет растягиваться)

Предполагая, что ваш слой является подклассом CALayer, ваш метод init должен выглядеть так:

    - (id)init
{
    self = [super init];
    if (self) {
        UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"];
        self.contents = (id)stretchableImage.CGImage;

        self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly

        self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height);
    }
    return self;
}

в соответствии с документацией содержимое прямоугольника contentCenter должно иметь значения между 0-1.

По умолчанию используется прямоугольник устройства (0,0,0,0) (1,0,1,0), что приводит к масштабированию всего изображения. Если прямоугольник простирается за пределы прямоугольника устройства, результат равен undefined.

Это он. Надеюсь, кто-то найдет это полезным, и это сэкономит время разработки.