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

Растянуть изображение как андроид девять патч?

UIImage Метод:

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight.

Здесь растягиваемая область вынуждена быть одним пикселом высотой/широким.

Я не могу установить растяжимую область, поэтому я хочу знать: существует ли категория UIImage?

После того, как я googled, я нашел lib.

Вопрос: Есть ли 9-патч-загрузчик для iPhone?

Объявление: http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

http://i.stack.imgur.com/Rc6my.png

Это исходный pic, и я хочу растянуть внутренний серый прямоугольник.

Спасибо заранее.

4b9b3361

Ответ 1

Один из способов достижения этого - использовать подход ниже,

UIImage * backgroundImg = [UIImage imageNamed:@"bg.png"];

backgroundImg = [backgroundImg resizableImageWithCapInsets:UIEdgeInsetsMake(2,2, 2, 2)];

[imgView setImage: backgroundImg];

UIEdgeInsetsMake (2,2, 2, 2) - количество пикселей, которые вы хотите разблокировать.

Ответ 2

Вы можете достичь девяти патчей с помощью программного обеспечения Tortuga22

Вы можете найти источник из этого GitHub здесь

Используйте его так:

[btnSubmit setImage: [TUNinePatchCache imageOfSize:[btnSubmit bounds].size 
                                forNinePatchNamed:@"imgNormalBackground"]
                       forControlState:UIControlStateNormal];

Ответ 3

Как и в iOS5, вы можете использовать resizableImageWithCapInsets: для достижения этого.

Ответ 4

Я не хотел загружать столько кода для простых 9 патч-изображений, которые у нас были. Так или иначе, здесь простое решение проблемы для заинтересованных. Он несколько жестко закодирован в наши 3 пиксельные области растяжения, но вы можете легко настроить их на свои нужды или найти их на изображении с помощью базового кода и использовать это вместо моих жестко закодированных параметров вставки.

+ (UIImage *) makeNinePatchImage:(UIImage *)image;
{
    //Clear the black 9patch regions
    CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    UIGraphicsBeginImageContextWithOptions(image.size, NO, [UIScreen mainScreen].scale);
    [image drawInRect:imageRect];

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextClearRect(context, CGRectMake(0, 0, image.size.width, 1));
    CGContextClearRect(context, CGRectMake(0, 0, 1, image.size.height));

    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIEdgeInsets insets;

    //hard coded for now, could easily read the black regions if necessary
    insets.left = insets.right = image.size.width / 2 - 1;
    insets.top = insets.bottom = image.size.height / 2 - 1;

    UIImage *nineImage = [image resizableImageWithCapInsets:insets     
                          resizingMode:UIImageResizingModeStretch];

    return nineImage;

}

Затем, чтобы использовать его в слове "кнопка", просто назовите его следующим образом:

[self.dummyButton setBackgroundImage:[EVUtility makeNinePatchImage:learnMoreImage] forState:UIControlStateNormal];

Готово.

Ответ 5

Если я правильно понимаю, вы хотите, чтобы прямоугольник развивался по длине и высоте. Хотя могут быть более эффективные решения, я мог бы предложить разбить границу на базовую единицу. Добавьте это изображение повторно один рядом друг с другом, чтобы сформировать прямоугольник границы желаемой длины и высоты. Затем нарисуйте внутренний прямоугольник серого цвета.