Растянуть изображение как андроид девять патч?
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, и я хочу растянуть внутренний серый прямоугольник.
Спасибо заранее.
Ответы
Ответ 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
Если я правильно понимаю, вы хотите, чтобы прямоугольник развивался по длине и высоте.
Хотя могут быть более эффективные решения, я мог бы предложить разбить границу на базовую единицу. Добавьте это изображение повторно один рядом друг с другом, чтобы сформировать прямоугольник границы желаемой длины и высоты. Затем нарисуйте внутренний прямоугольник серого цвета.