如何在RubyMotion中的OSX上实现图像按钮?

时间:2015-02-18 03:24:11

标签: objective-c ruby macos cocoa rubymotion

这让我感到非常轻松,但我无法让它发挥作用。

我正在创建一个按钮:

closeButton = NSButton.alloc.initWithFrame(
    [[10, 10], [100, 22]]
  ).tap do |button|
    button.bezelStyle = NSShadowlessSquareBezelStyle
    button.buttonType = NSMomentaryChangeButton
    button.title = 'Close'
    button.bordered = false
    button.image = NSImage.imageNamed('img/circle')
    p button.image
    button.imagePosition = NSImageOnly
    button.target = window
    button.action = 'close'
  end

circle.png中存储了2张circle@2x.png/Resources/img张图片。

毋庸置疑,我得到一个没有文字或图像的灰色按钮。此外,p button.image会返回nil

我已多次清理和重建我的项目。

这似乎不应该如此难以实施。我在俯瞰什么?

2 个答案:

答案 0 :(得分:1)

首先,我要说我对OSX没有经验,但我希望这个iOS信息会有所帮助。我被告知他们非常相同。您需要确保使用自定义按钮(UIButtonTypeCustom)。这将允许您使用背景图像功能。

这里有一些很好的示例代码,可能对您有帮助。

https://github.com/IconoclastLabs/rubymotion_cookbook/tree/master/ch_2/16_buttons

再一次,如果这不能胜任,我很抱歉,但我想我会发布这些信息来帮助你!

答案 1 :(得分:0)

所以我想出了这个。似乎imageNamed不能按照我期望的方式工作,或者我只是错误地使用它。

我可以通过执行以下操作在按钮上设置图像:

NSButton.alloc.initWithFrame(
    [[110, 10], [100, 22]]
).tap do |button|
    neutralImgPath = NSBundle.mainBundle.pathForResource("img/circle2", ofType: "png")
    neutralImgUrl = NSURL.fileURLWithPath(neutralImgPath)
    neutralImg = NSImage.alloc.initWithContentsOfURL(neutralImgUrl)

    button.setImage(neutralImg)

    button.setImageScaling(NSImageScaleProportionallyDown)
    button.setImagePosition(NSImageOnly)

    button.translatesAutoresizingMaskIntoConstraints = false
    button.bordered = false
    button.bezelStyle = NSShadowlessSquareBezelStyle
    button.buttonType = NSMomentaryChangeButton

    button.target = MainAppWindow.get
    button.action = 'minimize:'
end

肯定会想要找到一种更简洁的方法来做到这一点,但是现在,它完成了工作!