Нормализация массива CGFloat по высоте кадра UIView - PullRequest
0 голосов
/ 26 апреля 2018

Я строю массив значений CGFloat в UIBezierPath. Теперь я хочу нормализовать значения, чтобы максимальное значение массива занимало всю высоту.

Пока

let scaleFactor = (waveView.frame.height) * readFile.maxValue

for point in readFile.points {        
    let nextPoint = CGPoint(x: soundPath.currentPoint.x + sampleSpace, y: middleY - (point * scaleFactor) - 1.0)

    soundPath.addLine(to: nextPoint)
    soundPath.move(to: nextPoint)        
}

Но, похоже, не работает ...

EDIT ReadFile:

class ReadFile {
public enum ReadFileError:Error{
    case errorReading(String)

}

/* Player Interval Measured in Miliseconds (By now..) */
var beginPosition:Int32 = 0
var endPosition:Int32 = 0

/* Sample Rate -> Default 48KHz */
var sampleRate:Double = 48000

var samplesSeconds:CGFloat = 5

var maxValue:CGFloat = 0
var points:[CGFloat] = []

}

И

sampleSpace = 0.2

1 Ответ

0 голосов
/ 30 апреля 2018

Спасибо, Энди, за ваш ответ, но я наконец-то понял его.

Я рисую звуковую волну, поэтому она имеет положительные и отрицательные значения.

heightMax = waveView.frame.height / 2

Применяя правило трех (испанский перевод), я получаю следующее:

    func drawSoundWave(windowLength:Int32){

    // Drawing code
    print("\(logClassName): Drawing!!!")
    print("\(logClassName): points COUNT = \(readFile.points.count)")

    let soundPath = UIBezierPath()
    soundPath.lineWidth = lineWidth
    soundPath.move(to: CGPoint(x:0.0 , y: middleY))

    print("\(logClassName) max ")
    for point in readFile.points{

        let normalizedHeight:CGFloat = (waveView.frame.height * point) / (2 * readFile.maxValue)
        let nextPoint = CGPoint(x: soundPath.currentPoint.x + sampleSpace, y: middleY - (normalizedHeight))

        soundPath.addLine(to: nextPoint)
        soundPath.move(to: nextPoint)

    }

    let trackLayer = CAShapeLayer()
    trackLayer.path = soundPath.cgPath

    waveView.layer.addSublayer(trackLayer)

    trackLayer.strokeColor = UIColor.red.cgColor
    trackLayer.lineWidth = lineWidth
    trackLayer.fillColor = UIColor.green.cgColor
    trackLayer.lineCap = kCALineCapRound

}

, где

let normalizedHeight:CGFloat = (waveView.frame.height * point) / (2 * readFile.maxValue) 

- нормализованное значение с учетом readFile.maxValue и waveView.frame.height

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...