2016-02-17 2 views
1

Мне очень трудно получить цвет Picker для работы. После того, как я не мог заставить его передать какую-либо информацию обратно на вызов я попытался следующие:пытаясь заставить 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 в Label «LabelColor», который ставится на VCColorPicker.

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

2016-02-17 22: 47: 27.798 MagicACC [13202: 2720420] Неизвестный класс HSBColorPicker в файле Interface Builder. 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 
    } 
} 

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

René

ответ

0

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