2013-04-23 3 views
1

Я пишу код, чтобы использовать пользовательское изображение в качестве фона для UIView.Как изменить размер UIImage, созданного с помощью resizableImageWithCapInsets, когда используется для UIImageView/UIView

Приложение работает только на портрете. До сетчатки экрана 4" , я использовал фиксированный размер, рисованный PNG в качестве фонового изображения (card.png ниже) У меня был такой код:.

UIView* frontView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; 
frontView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 

UIImage* cardImage = [UIImage imageNamed:@"card.png"]; 
UIImageView* im = [[UIImageView alloc] initWithImage:cardImage]; 
im.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; 
[frontView addSubview:im]; 

// frontView has a bunch of stuff added... 

Как и следовало ожидать, когда я бег это на iPhone 5, все может иметь динамический размер и расположение, за исключением рисованного png, card.png. Так что фоновое изображение не использует всю высоту, которая доступна ...

Так что (я думаю) я хочу что-то вроде этого ...

UIImage* cardImage = [[UIImage imageNamed:@"card_resizable.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(72, 0, 60, 0)]; 

Я перерисовал card.png как card_resizable.png - это высота 140 пикселей, в середине есть 8-пиксельный кусок, который я хочу плитку, поэтому верхняя вставка имеет 72 пиксела в высоту, а нижняя - 60 пикселей.

Каков следующий шаг?

Должен ли я создать UIImageView с динамическим размером frontView?

Как сделать изменяемое по размеру изображение, изменить размер?

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

Приветствия, Gavin

Обновление:

Я был неправильно установки значения пикселей для UIEdgeInsetsMake(72, 0, 60, 0) Эти значения основаны на @2x изображения. Когда изменено на UIEdgeInsetsMake(36, 0, 30, 0) - я получаю правильное вертикальное изменение размера.

Как Майк отметил, что мне нужно, чтобы установить размер UIImageView к родителю, и правильно установить его autoresizingMask:

im.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Я знаю, что есть UIImageView размера динамически размера, правильно заполнить его родительский вид - frontView (я дал ему зеленый фон для визуального контроля на экране 3.5 "и 4".

Изменчивое изображение, cardImage, также изменяет размер, правильно, в вертикальной плоскости.

ответ

2

Как только вы пройдете растягиваемое изображение до UIImageView, вы просто измените размер этого изображения на любую необходимую вам высоту.

В вашем случае, вы, вероятно, хотите, чтобы сделать вид изображения заполнить его родителя, делая это:

im.frame = frontView.bounds; 
im.autoresizingMask = 
    UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
[frontView addSubview:im]; 

Мы im заполнить frontView и сказать ему, чтобы автоматически увеличивать его ширина/высота, когда его родитель (frontView) меняется размер. Это должно делать то, что вы хотите.

+0

Привет Майк, спасибо за указание тех вещей из: установление границ и маски автоматического изменения. Я попытался установить границы и использовал маску изменения размера ... Но неправильная маска изменения размера мне нужна «UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight', как вы указали. Как бы то ни было, реальная проблема была связана с моими вставками с шапками ... Значения 72 и 60 были основаны на образе '@ 2x' (ни один из вас, вы, ребята, не зная об этом) ... когда я помещаю тогда в 1x пространство, Я получил желаемое вертикальное изменение размера (с правильной 'autoresizingMask' на месте. –

-1

Посмотрите на свойство UIView contentMode. это должно дать вам некоторое представление о том, как UIImageView визуализирует изображение внутри, всякий раз, когда он меняет его размер.

0

Вы можете попробовать с stretchableImage

UIImage *image = [UIImage imageNamed:@"card_resizable.png"]; 
UIImage* cardImage = [image stretchableImageWithLeftCapWidth:0.0f 
               topCapHeight:70.0f]; 
+0

Эй, спасибо, я попробовал' stretchableImageWithLeftCapWidth' - но это не то, что мне нужно. 'ResizableImageWithCapInsets' правильный, я делал другие ошибки. Cheers. –

+0

@GavinHope Рад это слышать :) – Anupdas

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