入力オーディオデータの波形を描画するアプリケーションを構築しています。ここで波形描画のパフォーマンス最適化
は、それがどのように見えるかを視覚的に表現され:
それはAppleのネイティブVoiceMemosアプリと同様に動作します。しかし、それはパフォーマンスが欠けています。波形そのものはUIScrollView
のサブクラスで、CALayer
のインスタンスを描画して、紫色の「棒」を表し、それらをサブレイヤとして追加します。開始波形で音声入力が、私はこの機能で波形を更新開始したときに、空である:
class ScrollingWaveformPlot: UIScrollView {
var offset: CGFloat = 0
var normalColor: UIColor?
var waveforms: [CALayer] = []
var lastBarRect: CGRect?
var kBarWidth: Int = 5
func updateGraph(with value: Float) {
//Create instance
self.lastBarRect = CGRect(x: self.offset,
y: self.frame.height/2,
width: CGFloat(self.barWidth),
height: -(CGFloat)(value * 2))
let barLayer = CALayer()
barLayer.bounds = self.lastBarRect!
barLayer.position = CGPoint(x: self.offset + CGFloat(self.barWidth)/2,
y: self.frame.height/2)
barLayer.backgroundColor = self.normalColor?.cgColor
self.layer.addSublayer(barLayer)
self.waveforms.append(barLayer)
self.offset += 7
}
...
}
紫色のバーの最後RECTは、私はAppleのVoiceMemosのように実行し、それを維持するために、波形のcontentOffset.x
を増加し始める画面の中央に達するとアプリ。
バーカウントが〜500〜1000に達すると、が表示されます。setContentOffset
の間に目立つ波形の遅れが発生します。
self.inputAudioPlot.setContentOffset(CGPoint(x: CGFloat(self.offset) - CGFloat(self.view.frame.width/2 - 7),y: 0), animated: false)
ここで何を最適化することができますか?どんな助けもありがたい。
サブビューを追加しています_ad infinitum_?もしそうなら、あなたはビューを再利用できるように 'UICollectionView'を使ってこれを実装する必要があります。 –