私はユニバーサルチューナーアプリケーションを作成しようとしていますが、アナログメーターを描画しようとすると、別のデバイスに混乱します。多分それは非常にハードコードされたのです。これをチェックしてください:SwiftのUIbezierPathでユニバーサルラウンドドロー(lineDashPatternを使用)を作成する方法
ラベルがあまりにも同じUIViewの下にあります。これらのパスを描画するコードを確認してください:
override func draw(_ rect: CGRect) {
let center = CGPoint(x:bounds.width/2, y: bounds.height)
var radius: CGFloat = max(bounds.width, bounds.height+50)
// Define the thickness of the arc.
let arcWidth: CGFloat = 1
let startAngle: CGFloat = π
let endAngle: CGFloat = 2 * π
var path = UIBezierPath(arcCenter: center,
radius: radius/2 - arcWidth/2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
path.lineWidth = arcWidth
counterColor.setStroke()
path.stroke()
radius = max(bounds.width, bounds.height+70)
path = UIBezierPath(arcCenter: center,
radius: radius/2 - arcWidth/2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
let strokeColor = UIColor.black.cgColor
roundThinLayer.path = path.cgPath
roundThinLayer.strokeColor = strokeColor
roundThinLayer.lineWidth = 16.0
roundThinLayer.fillColor = UIColor.clear.cgColor
roundThinLayer.lineDashPattern = [ 0.5, 4.55 ]
//roundThinLayer.lineDashPhase = 0.25
self.layer.addSublayer(roundThinLayer)
radius = max(bounds.width, bounds.height+90)
path = UIBezierPath(arcCenter: center,
radius: radius/2 - arcWidth/2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
roundThickLayer.path = path.cgPath
roundThickLayer.strokeColor = strokeColor
roundThickLayer.lineWidth = 40
roundThickLayer.fillColor = UIColor.clear.cgColor
roundThickLayer.lineDashPattern = [ 1.5, 140 ]
roundThickLayer.lineDashPhase = 0.25
self.layer.addSublayer(roundThickLayer)
}
は、誰かが私をハードコーディングせずに、これらの値を得るのを助けることはできますか?つまり、私はストーリーボード(iPhone 7で動作している)のように細かく太くしたいと思っています。私はこのアプリを普遍的なものにしたい。
注:自動サイズ調整は正しいですか?
ありがとうございます。
Crikey @Denis、これは古い学校の等号記号です。 –
問題は何ですか?そこに表示されるスクリーンショットは上手く見えます。 –
@AshleyMillsエミュレータをよく見ると(UIViewの幅/高さが変更されたため)、ストーリーボードと比較して違いがあります。なぜ私は自動化するビューを設定すると知りたい。 –