Я пишу приложение простого рисования, где каждый раз, когда пользователь кладет палец вниз, используется другой цвет. Если я установил свои «красные, зеленые, синие» значения в определенные значения, тогда он будет рисоваться так, как должен, но когда я пытаюсь использовать функцию рандомизатора 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)
}
любой совет был бы рад!
Спасибо! вы были правы! – genericguy25