ruby - 如何将这个 Objective C 重写为 RubyMotion?

标签 ruby ios5 rubymotion

在 objective-c 中,可以将背景图像设置为拉伸(stretch)的 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 实例上调用的两个方法:stretchableImageWithLeftCapWidthtopCapHeight

我尝试了以下方法,但没有成功:

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

谁能给点建议吗?

最佳答案

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

它被声明为

- (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,则需要继续使用此方法。

关于ruby - 如何将这个 Objective C 重写为 RubyMotion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540770/

相关文章:

ruby - 没有核心扩展的 String 上的链式方法

ruby-on-rails - 搜索表单未路由到 Rails 5.1 中的正确 Controller

ios - NSURLConnection 发送异步请求 : not initiating request

iphone - 如何在地址簿保存联系人前检查是否添加了组织名称?

ios - Rubymotion 和结构指针

ios - RubyMotion 中的 CDQ 权限错误

ruby - 我正在使用 Deepin linux 15.4.1。我想安装 Ruby 语言做什么,我想执行 Sass/SCSS。但现在我尝试以 root 用户 : 的身份执行此操作

ruby - 如何为sublime text 2添加语法高亮

objective-c - 重写的 getter 不会触发其他选择器

sqlite - 结合使用SQLite和Rubymotion