При использовании resizableImageWithCapInsets: для создания изображения для кнопки UIB работает только нормальное состояние (состояние, заданное для изображения с помощью setBackgroundImage: forState :).Все остальные состояния показывают разрыв вместо нарисованного изображения.UIButton говорит, что если для определенного состояния изображение не установлено, изображение в нормальном состоянии будет использоваться с наложением для отключенных и выбранных состояний.
Вот нормальное состояние:
Вот выбранное состояние:
А вот исходное изображение:
Этоявно использует предоставленное мной изображение с изменяемым размером, но изображение не рисует область с измененным размером.(Вы можете видеть левый и правый края, но средняя область, которая должна быть растянута, просто не прорисована).
Интересно, что stretchableImageWithLeftCapWidth: topCapHeight: работает.Теперь это устаревший метод в iOS 5, но с появлением пробела в новом API, я могу застрять, используя его.
Я признаю, что могу предоставить больше изображений для каждого состояния, но это побеждаетцель, которую я пытаюсь достичь, - уменьшить объем используемой памяти, а также добавить дополнительную зависимость от моего графического дизайнера, которой я бы хотел избежать.
// This is the gist of the code being used
UIImage* image = [UIImage imageNamed:@"button.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height/2, image.size.width/2, image.size.height/2, image.size.width/2);
image = [image resizableImageWithCapInsets:insets];
[self.button setBackgroundImage:image forState:UIControlStateNormal];
// Even doing the following results in the same behaviour
[self.button setBackgroundImage:image forState:UIControlStateSelected];