2017-02-22 2 views
-1

Я пишу приложение простого рисования, где каждый раз, когда пользователь кладет палец вниз, используется другой цвет. Если я установил свои «красные, зеленые, синие» значения в определенные значения, тогда он будет рисоваться так, как должен, но когда я пытаюсь использовать функцию рандомизатора CGFloat, приложение, похоже, игнорирует ввод пользователя. Я проверил, что функция рандомизатора работает просто, когда рандомизированные значения распечатываются, когда они сгенерированы.приложение для рисования не будет использовать произвольно сгенерированные CGfloats, но будет использовать статические CGfloats для генерации цвета.

В приведенном ниже коде, если я закомментировать

red = randomCGFloat(min: 1, max: 254) 
green = randomCGFloat(min: 1, max: 254) 
blue = randomCGFloat(min: 1, max: 254) 

и использовать значения по умолчанию 0 для красного, зеленого, синего setStrokeColor, то приложение рисования розыгрыши обычно используя черный цвет обводки. Если я раскомментирую рандомизаторы, приложение не отображает ничего, когда я пытаюсь провести рисование. Пределы для рандомизаторов установлены правильно (и проверены в сообщениях распечатки), поэтому я не уверен, почему setStrokeColor игнорирует значения.

import UIKit 
import Foundation 

class ViewController: UIViewController { 

@IBOutlet weak var mainImageView: UIImageView! 

var lastPoint = CGPoint.zero 
var red: CGFloat = 0 
var green: CGFloat = 0 
var blue: CGFloat = 0 
var brushWidth: CGFloat = 30.0 
var opacity: CGFloat = 1.0 
var swiped = false 

override func viewDidLoad() { 
super.viewDidLoad() 

} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = false 

    red = randomCGFloat(min: 1, max: 254) 
    green = randomCGFloat(min: 1, max: 254) 
    blue = randomCGFloat(min: 1, max: 254) 

    print("red: \(red)") 
    print("green: \(green)") 
    print("blue: \(blue)") 

    if let touch = touches.first { 
     lastPoint = touch.location(in: self.view) 

    } 
} 

func drawLineFrom(from fromPoint: CGPoint, to toPoint: CGPoint) { 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0) 

    mainImageView.image?.draw(in: view.bounds) 

    let context = UIGraphicsGetCurrentContext() 

    context?.move(to: fromPoint) 
    context?.addLine(to: toPoint) 

    context?.setLineCap(CGLineCap.round) 
    context?.setLineWidth(brushWidth) 
    context?.setStrokeColor(red: red, green: green, blue: blue, alpha: 1.0) 
    context?.setBlendMode(CGBlendMode.normal) 
    context?.strokePath() 

    mainImageView.image = UIGraphicsGetImageFromCurrentImageContext() 
    mainImageView.alpha = opacity 
    UIGraphicsEndImageContext() 
} 

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    swiped = true 
    if let touch = touches.first { 
     let currentPoint = touch.location(in: view) 
     drawLineFrom(from: lastPoint, to: currentPoint) 

     lastPoint = currentPoint 
    } 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if !swiped { 
     // draw a single point 
     self.drawLineFrom(from: lastPoint, to: lastPoint) 
    } 
} 

func randomCGFloat(min: CGFloat, max: CGFloat) -> CGFloat { 
    return round(CGFloat(Float(arc4random())/Float(UINT32_MAX)) * (max - min) + min) 
} 

любой совет был бы рад!

ответ

1

Значения красного/зеленого/голубого цвета, которые вы передаете setStrokeColor, должны быть между 0.0 и 1.0 не от 1 до 254, как в вашем коде.

+0

Спасибо! вы были правы! – genericguy25