如何将此Objective C重写为RubyMotion?

时间:2012-05-10 19:19:18

标签: ruby ios5 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)

有人可以提供建议吗?

1 个答案:

答案 0 :(得分:5)

您错误地破坏了该方法选择器

声明为

- (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,那么你需要继续使用它。