Как задать растягиваемое изображение с различными размерами левой и правой шапки на iPhone - PullRequest
2 голосов
/ 15 сентября 2011

Я использую раскрывающийся список для iPhone. Изображение выглядит так:

[углы 5 пикселей] [растягиваемая область 1 пикс.] [Стрелка 10 пикселей с углами]

Я бы хотел использовать что-то вроде:

UIButton *dd = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
dd.autoresizingMask=UIViewAutoresizingFlexibleWidth;
[dd setBackgroundImage:[[UIImage imageNamed:@"dd"] stretchableImageWithLeftCapWidth:5      topCapHeight:0] forState:UIControlStateNormal];

Не могу найти способ указать правильную пропускную способность. Документы говорят, что это рассчитывается из левой пропускной способности. Должен быть способ иметь растягиваемое изображение с разными фиксированными размерами слева и справа? Нарисуйте 9-патч изображение, может быть?

У кого-нибудь есть решение для этого на iphone?

Ответы [ 2 ]

4 голосов
/ 15 сентября 2011

Следующий пиксель после левого колпачка - это единственное, что растягивается по горизонтали. Поэтому 10 пикселей справа сохраняются с их исходным размером, и нет смысла иметь правую шапку.

Если на вашем изображении есть искажения, это связано с чем-то другим. Это должно работать:

UIButton *dd = [UIButton buttonWithType:UIButtonTypeCustom];
[dd setFrame:CGRectMake(0, 0, 200, 20)];
[dd setBackgroundImage:[[UIImage imageNamed:@"dd.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0] forState:UIControlStateNormal];
[self.view addSubview:dd];
0 голосов
/ 29 июня 2015

Причина, по которой вы все равно видите искажение, заключается в том, что исходное изображение шире, чем указанная вами ширина (или высота, если искажение является вертикальным). Например. если вам нужна кнопка шириной 200 пикселей, но исходное изображение шириной 300 пикселей, вы увидите искажение даже при использовании ее в качестве растягиваемого изображения. Начните с короткого изображения, которое можно растянуть до желаемого размера с помощью указанных заглушек, например. изображение шириной 10 пикселей подойдет для ваших нужд.

...