Добавление градиента в UIView вызывает ошибку

Я использую RubyMotion. Сообщение об ошибке, которое я вижу в Терминале:

рейк прерван! Ошибка команды со статусом (1): [DYLD_FRAMEWORK_PATH="/Applications/Xcode.a...] /Library/RubyMotion/lib/motion/project.rb:101:in block in <top (required)>' /usr/local/rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in eval' /usr/local/rvm/gems/ruby -1.9.3-p194/bin/ruby_noexec_wrapper:14:in `' Задачи: TOP => по умолчанию => симулятор

Таким образом, ошибка возникает в файле, созданном самим RubyMotion, а не в одном из моих файлов. Хотя, очевидно, я все еще виноват. Я нашел строку, которая, кажется, вызывает ошибку. Вот соответствующий код подкласса UIViewController, который создает UIView и градиент:

def loadView

    button1 = UIView.alloc.initWithFrame(CGRect.make(x:0, y:55, width:100, height:40))
    gradientLayer = CAGradientLayer.layer
    gradientLayer.colors = NSArray.arrayWithObjects(UIColor.redColor.CGColor, UIColor.greenColor.CGColor, UIColor.blackColor.CGColor, nil)

Хотя позже появится больше кода, я обнаружил, что именно строка gradientLayer.colors вызывает ошибку. Если я закомментирую эту строку и все после нее в loadView, ошибка не возникает. Есть идеи, в чем проблема?


person maxedison    schedule 13.02.2013    source источник
comment
Над строкой rake aborted нет ошибки? Откуда берется CGRect.make (для меня я получаю NoMethodError, когда пытаюсь его использовать) - вы пробовали вместо этого просто CGRectMake(0, 55, 100, 40)? Используете ли вы какие-либо сторонние библиотеки для этого?   -  person Dylan Markow    schedule 13.02.2013
comment
Попробуйте это: gradientLayer.colors = [ UIColor.redColor.CGColor, UIColor.greenColor.CGColor, UIColor.blackColor.CGColor ]   -  person Jamon Holmgren    schedule 14.02.2013
comment
@JamonHolmgren - Вот оно! И, конечно же, гораздо более приятный способ создания массива. Если вы хотите опубликовать свой комментарий в качестве ответа, я буду рад отметить его как решение.   -  person maxedison    schedule 15.02.2013
comment
@DylanMarkow - я использую гем геодвижения, который предоставляет CGRect.make   -  person maxedison    schedule 15.02.2013
comment
Здорово! Рад, что это сработало для вас.   -  person Jamon Holmgren    schedule 15.02.2013


Ответы (1)


Раньше у меня были проблемы с созданием массивов с помощью NSArray. Попробуй это:

def loadView
  button1 = UIView.alloc.initWithFrame(CGRect.make(x:0, y:55, width:100, height:40))
  gradientLayer = CAGradientLayer.layer
  gradientLayer.colors = [ UIColor.redColor.CGColor, UIColor.greenColor.CGColor, UIColor.blackColor.CGColor ]
  # ...
end
person Jamon Holmgren    schedule 15.02.2013