Я не хотел загружать так много кода для простых изображений с 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];
Сделанный.
person
Joel Teply
schedule
09.09.2013