Я не хотел загружать столько кода для простых 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];
Готово.