2012-01-31 5 views
0

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

создать три 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 занимают весь экран, так как это то, что вы хотите, чтобы изображение расширялось?

ответ

2

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

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

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

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

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

Смежные вопросы