Эластичные, изменяемые размеры кнопок iPhone / iPad - подкласс UIButton - PullRequest
1 голос
/ 20 октября 2010

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

Вот что у меня есть.

#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

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

Может кто-нибудь помочь? исправить это или мой образ мышления неправильный?

Спасибо

1 Ответ

1 голос
/ 22 октября 2010

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

#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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...