Как мне переписать этот Objective C на RubyMotion?

В задаче C можно установить фоновое изображение в растянутый png следующим образом:

button = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 300, 44)];
[button setTitle: @"Tap me" forState: UIControlStateNormal];
[button setBackgroundImage:[[UIImage imageNamed: @"greenButton.png"]
                                 stretchableImageWithLeftCapWidth:8.0f
                                 topCapHeight:0.0f]
                       forState:UIControlStateNormal];

Однако, пытаясь перенести это на Ruby, я продолжаю получать исключения. Проблема связана с двумя методами, вызываемыми для экземпляра UIImage: stretchableImageWithLeftCapWidth и topCapHeight.

Я пробовал следующее безрезультатно:

greenImage = UIImage.imageNamed("greenButton.png")
greenImage.stretchableImageWithLeftCapWidth = 8.0
greenImage.topCapHeight = 0.0
@timerButton.setBackgroundImage(greenImage, forState: UIControlStateNormal)

Кто-нибудь может посоветовать?


person bodacious    schedule 10.05.2012    source источник
comment
Ах, я вижу, что stretchableImageWithLeftCapWidth устарел в пользу resizableImageWithCapInsets   -  person bodacious    schedule 10.05.2012


Ответы (1)


Вы неправильно разбили этот селектор метода.

Он объявлен как

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight

это должно называться так

greenImage.stretchableImageWithLeftCapWidth(8.0, topCapHeight:0.0)

Скорее всего, вы захотите присвоить это чему-то, чтобы оно выглядело так.

greenImage = UIImage.imageNamed("greenButton.png")
greenImage = greenImage.stretchableImageWithLeftCapWidth(8.0, topCapHeight:0.0)
@timerButton.setBackgroundImage(greenImage, forState: UIControlStateNormal)

Примечание

Вы правы, этот метод помечен как устаревший в iOS 5, но также важно отметить, что метод замены также был представлен в iOS 5, поэтому, если вы планируете поддерживать более старые iOS, вам нужно будет продолжать использовать это.

person Paul.s    schedule 10.05.2012