Эластичные кнопки изменяемого размера для iPhone/iPad — подкласс UIButton

Я хочу иметь возможность создавать пользовательские кнопки с фоновым изображением, используя фоновое изображение типа scale9, что означает, что ширина кнопки может быть динамической. Я видел пример в Интернете, где люди делают это для каждой кнопки, но мне кажется, что было бы лучше создать новый объект, который является подклассом UIButton, который затем можно использовать в конструкторе интерфейсов в качестве класса для любого пользовательского кнопка (круглая прямоугольная кнопка настроена на пользовательскую).

Вот что у меня есть до сих пор.

#import <Foundation/Foundation.h>

@interface LargeButton : UIButton {
}

@end

#import "LargeButton.h"


@implementation LargeButton

- (id)initWithFrame:(CGRect)frame {
 if (self = [super initWithFrame:frame]) {

  self.frame = CGRectMake(0, 0, 170.0, 48.0);

  // Center the text vertically and horizontally
  self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

  UIImage *image = [UIImage imageNamed:@"btnBigPurple.png"];

  // Make a stretchable image from the original image
  UIImage *stretchImage = 
  [image stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];

  // Set the background to the stretchable image
  [self setBackgroundImage:image forState:UIControlStateNormal];

  // Make the background color clear
  //self.backgroundColor = [UIColor clearColor];
 }
 return self;
}

@end

Однако это не работает. Когда я запускаю этот им-симулятор, я вижу текст кнопки, но у кнопки нет фона. Я поставил точку останова и знаю, что она работает, и проверяю консоль, и ошибок нет.

Кто-нибудь может помочь? исправить это или я неправильно думаю?

Спасибо


person Chris    schedule 20.10.2010    source источник
comment
Я помню, как где-то читал, что изображения в UIButtons должны иметь определенные стандарты изображения RGB. Если у вас нет изображения, которое соответствует этому, оно не будет отображаться. Не помню где, так что я не сильно помогу :(   -  person gabaum10    schedule 21.10.2010
comment
Спасибо за ответ. Изображение работает, если я устанавливаю его на кнопку в качестве фона без создания подкласса UIButton и настройки моей кнопки для использования моего объекта, поэтому я не думаю, что это проблема с изображением.   -  person Chris    schedule 22.10.2010


Ответы (1)


Я исправил это сам. Для тех, кому интересно.

#import <Foundation/Foundation.h>


@interface LargeButton : UIButton {
}

@end

#import "LargeButton.h"


    @implementation LargeButton

    - (void)drawRect:(CGRect)rect{
        UIImage *greenBalloon = [[UIImage imageNamed:@"btnBigPurple.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
        [self setBackgroundImage:greenBalloon forState:UIControlStateNormal];
    }

    @end

Простой, но эффективный.

person Chris    schedule 22.10.2010
comment
Большое спасибо, мне просто нужно было узнать, какой метод был вызван. - person SirRupertIII; 02.11.2012