UIImageView autoresizingmask, UIImage stretchableImageWithLeftCapWidth - PullRequest
0 голосов
/ 31 января 2012

Я смотрел несколько видеороликов WWDC, и они говорили об использовании UIImageView, чтобы растянуть ваши изображения, чтобы не было лишней памяти. В их примере использовался небольшой текстовый пузырь, похожий на тот, который вы получаете при долгом нажатии на tableViewCell в приложении Music. Затем они говорят о том, как бы вам пришлось разделить его на 3 среза, левый, правый и центральный, поскольку центральная часть имеет маленький треугольник внизу, который указывает на таблицу ViewCell, которую вы долго нажимали. Могут ли некоторые объяснить, как кто-то делает это, поскольку они не предоставляют никакого кода в своем примере? Псевдокод в порядке. Глядя на документацию, я думаю:

создайте три UIImages наименьшего размера из вашего графического редактора:

UIImage *leftImage = [UIImage imageNamed:@"left.png"];
UIImage *rightImage = [UIImage imageNamed:@"right.png"];
UIImage *centerImage = [UIImage imageNamed:@"center.png"];

leftImage = [leftImage stretchableImageWithLeftCapWidth:0 topCapHeight:0];
rightImage = [rightImage stretchableImageWithLeftCapWidth:0 topCapHeight:0];
centerImage = [centerImage stretchableImageWithLeftCapWidth:0 topCapHeight:0];

UIImageView *leftImgView = [[UIImageView alloc] initWithImage:leftImage];
leftImgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIImageView *rightImgView = [[UIImageView alloc] initWithImage:rightImage];
leftImgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIImageView *centerImgView = [[UIImageView alloc] initWithImage:centerImage];
leftImgView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

// do I just add them all to the subview of self.view?  Do I need to set their frames somewhere?  If so, how do I know where they go since it's 3 slices making up an image.
// release memory

Мой связанный с этим вопросом вопрос: как бы вы поступили в IB? Например, вы заставляете 3 imageViews занимать весь экран, поскольку вы хотите, чтобы изображение расширялось?

1 Ответ

2 голосов
/ 31 января 2012

На самом деле вам не нужно создавать три изображения. Суть растягиваемого UIImage в том, что он растягивает середину, а не определяемые пользователем концы. Вы определяете горизонтальные и вертикальные области в пикселях, которые вы не хотите растягивать.

Это действительно просто использовать, вот пример:

UIImage *stretchyImage = [image stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0]

Тогда просто установите желаемый размер. Хорошая документация с иллюстрациями: здесь .

EDIT: Я думаю, что вы должны создать растягиваемое изображение программно, см. здесь .

...