пытаюсь заставить Color Picker работать в Swift 2.0

Мне очень трудно заставить работать палитру цветов. После того, как я не смог заставить его делегировать какую-либо информацию обратно на вызов, я попробовал следующее:

UIViewController с именем VCColorPicker.swift для UIViewController

UIView подключен к HSBColorPicker.swift.

Ниже приведен код для VCColorPicker.swift (UIViewController).

import UIKit

class VCColorPicker :UIViewController {

@IBOutlet weak var LabelColor: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    print("VCColorPicker loaded")
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

Цель состоит в том, что я получаю, щелкнув UIView, цвет, который записывается в BackgroundColor метки «LabelColor», которая помещается в VCColorPicker.

К сожалению, возникают две проблемы: во-первых, окно не строится с последней строкой, в которой я пытаюсь заполнить LabelColor. (Приложение не создается) Если я вытащу его, экран для VCColorPicker не загрузится со следующим кодом ошибки.

17.02.2016 22:47:27.798 MagicACC[13202:2720420] Неизвестный класс HSBColorPicker в файле построителя интерфейсов. VCColorPicker загружен 2016-02-17 22:47:27.806 MagicACC[13202:2720420] * Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* -CGColor не определен для UIColor ; необходимо сначала преобразовать цветовое пространство.

Вот код для HSBColorPicker, который я нашел здесь на странице и попытался адаптировать.

import UIKit

internal protocol HSBColorPickerDelegate : NSObjectProtocol {
    func HSBColorColorPickerTouched(sender:HSBColorPicker, color:UIColor, point:CGPoint, state:UIGestureRecognizerState)
}

@IBDesignable

class HSBColorPicker: UIView {

    @IBInspectable var elementSize: CGFloat = 1.0 {
        didSet {
            setNeedsDisplay()
        }
    }

    private func initialize() {
        print("HSCColorPicker loaded - initialize start")
        self.clipsToBounds = true
        let touchGesture = UILongPressGestureRecognizer(target: self, action: "touchedColor:")
        touchGesture.minimumPressDuration = 0
        touchGesture.allowableMovement = CGFloat.max
        self.addGestureRecognizer(touchGesture)
        print("HSCColorPicker loaded - initialize stop")
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        initialize()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initialize()
    }

    override func drawRect(rect: CGRect) {
        print("HSCColorPicker loaded - drawRect start")
        let context = UIGraphicsGetCurrentContext()

        for var y = CGFloat(0.0); y < rect.height; y=y+elementSize {
            let saturation = y < rect.height / 2.0 ? CGFloat(2 * y) / rect.height : CGFloat(1.0)
            let brightness = y < rect.height / 2.0 ? CGFloat(1.0) : 2.0 * CGFloat(rect.height - y) / rect.height

            for var x = CGFloat(0.0); x < rect.width; x=x+elementSize {
                let hue = x / rect.width
                let color = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1.0)
                CGContextSetFillColorWithColor(context, color.CGColor)
                CGContextFillRect(context, CGRect(x:x, y:y, width:elementSize,height:elementSize))
            print("HSCColorPicker loaded - drawRect stop")
            }
        }
    }

    func getColorAtPoint(point:CGPoint) -> UIColor {
        print("HSCColorPicker loaded - getColorAtPoint start")
        let roundedPoint = CGPoint(x:elementSize * CGFloat(Int(point.x / elementSize)),
            y:elementSize * CGFloat(Int(point.y / elementSize)))
        let saturation = roundedPoint.y < self.bounds.height / 2.0 ? CGFloat(2 * roundedPoint.y) / self.bounds.height : CGFloat(1.0)
        let brightness = roundedPoint.y < self.bounds.height / 2.0 ? CGFloat(1.0): 2.0 * CGFloat(self.bounds.height - roundedPoint.y) / self.bounds.height
        let hue = roundedPoint.x / self.bounds.width
        print("HSCColorPicker loaded - getColorAtPoint stop")
        return UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1.0)
    }

    func touchedColor(gestureRecognizer: UILongPressGestureRecognizer){
        let vPoint = gestureRecognizer.locationInView(self)
        vColor = getColorAtPoint(vPoint)
        VCColorPicker.LabelColor.backgroundcolor = vColor
    }
}

Я был бы очень признателен, если бы кто-нибудь сказал мне, как мне нужно изменить код, чтобы это действительно работало. Заранее спасибо. Может быть, вы могли бы также сказать мне, есть ли лучший способ сделать это. Если вы ответите, пожалуйста, дайте мне точную информацию о том, как изменить код. Я пытался понять это с помощью нескольких разных книг, но я не могу понять, что я делаю неправильно.

Рене


person René Blaser    schedule 17.02.2016    source источник


Ответы (1)


Ok. Я, наконец, получил это после того, как прошел все это построчно. Ошибка не имела ничего общего с кодом, а на самом деле с рабочим процессом, который я реализовал. Программа пыталась сопоставить переменную, которой еще не было присвоено никакого значения. :-) На самом деле, если кто-то выдает такой же код ошибки, просто посмотрите, не пропустили ли вы ту же проблему. :-)

person René Blaser    schedule 21.02.2016