2010-04-13 2 views

ответ

9

Интерфейсный строитель не поддерживает растяжимые изображения.

-(void) viewDidLoad { 
    [super viewDidLoad]; 
    [myImageView setImage:[[myImageView image] stretchableImageWithLeftCapWidth:5 topCapHeight:5 ]]; 
} 
+0

«Конструктор интерфейсов не поддерживает растяжимые изображения». ==> Извините, но это делает. «Растяжка» принимает эту роль, упомянутую в моем ответе ниже – samthui7

2

Это в настоящее время (с версии 4.5) ограничение InterfaceBuilder. Однако для создания каждой кнопки необходимо создать IBOutlet, а вручную указать, что изображение растягивается в viewDidLoad, не является отличным решением, если не по каким-либо другим причинам, чем это делает создание более громоздким, а также более хрупким.

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

@implementation NTSTButton 

- (id) initWithCoder:(NSCoder *)aDecoder { 

    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     /* There is no support in IB for stretchable images. So, let's 
      make sure _any_ background image assigned to this button 
      stretches correctly. 
      Note: Setting the stretch cap to 10px, which should work with 
      almost all button background images. 
     */ 
     UIImage *normalImage = 
       [[self backgroundImageForState:UIControlStateNormal] 
         stretchableImageWithLeftCapWidth:10 topCapHeight:10] ; 

     UIImage *highlightedImage = 
       [[self backgroundImageForState:UIControlStateHighlighted] 
         stretchableImageWithLeftCapWidth:10 topCapHeight:10] ; 

     [self setBackgroundImage:normalImage 
       forState:UIControlStateNormal]; 

     [self setBackgroundImage:highlightedImage 
       forState:UIControlStateHighlighted]; 
    } 
    return self; 
} 

@end 
+0

+1 спасибо за направление – Brenden

0

Подобно @answerbot, но обновляется прошивкой 5.0+, как stretchableImageWithLeftCapWidth:topCapHeight: теперь осуждается.

@implementation UIButtonStretchable 

- (id) initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setBackgroundImage: [[self backgroundImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:UIControlStateNormal]; 
     [self setBackgroundImage: [[self backgroundImageForState:backgroundImageForState:UIControlStateHighlighted] resizableImageWithCapInsets:UIEdgeInsetsMake(22,6,22,6)]forState:backgroundImageForState:UIControlStateHighlighted]; 
    } 
    return self; 
} 
@end 
0

iOS7 каталогов также представили активы, где вы можете указать растяжение области ваших изображений, но это работает только тогда, когда вы только поддерживать iOS7 (т.е. вы не заботитесь о пользователях оригинального IPAD, IPod Touch, или 3GS, да, в iOS нет фрагментации).

См https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/SlicinganImage/SlicinganImage.html#//apple_ref/doc/uid/TP40013303-CH4-SW1

0

Используйте Stretching конфиги в View разделе.

  • Прежде всего, измените режим просмотра на Aspect fill.

  • Затем отредактируйте X, Y, Ширина, поле высоты в Stretching часть. Например: Пусть говорят, у вас есть размер 10x20 изображения, и хотите, чтобы установить его в размер вид 5x10 ==> Set X = 5/10 = 0,5, Y = 10/20 = 0,5

ПРИМЕЧАНИЕ.: IB не позволяет использовать меньшее изображение для «растягивания» в более крупный кадр, поэтому вам нужно сконфигурировать ваше изображение как можно больше.

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