私はこのプロジェクトを持っていますSwiftySwitch。正確なコーナー半径でUIView.animate()でUIViewを拡大するにはどうすればいいですか?
私の目標は、アニメーションのそれぞれの特定の瞬間の現在の円の高さよりも大きなコーナーの半径を持つ代わりに、サークルを拡大して円の形を維持しないようにすることです。
成長しているサークルを扱うこのコードはここにある:私はRIGHT HERE言う
func turnOn() {
let tempView = UIView(frame: CGRect(x: ballDiameter/2, y: ballDiameter/2, width: 0, height: 0))
tempView.backgroundColor = onColor
tempView.layer.cornerRadius = ballDiameter/2
self.addSubview(tempView)
UIView.animate(withDuration: dotTravelTime, animations: { [weak self] in
//RIGHT HERE is the code for the circle to hold it's circular form
if self != nil {
tempView.frame = CGRect(x: 0, y: 0, width: self!.ballDiameter, height: self!.ballDiameter)
tempView.layer.cornerRadius = self!.ballDiameter/2
}
self?.layoutIfNeeded()
}) { [weak self] _ in
self?.backgroundColor = self!.onColor
tempView.removeFromSuperview()
}
}
func turnOff() {
let tempView = UIView(frame: CGRect(x: 0, y: 0, width: ballDiameter, height: ballDiameter))
tempView.backgroundColor = onColor
self.addSubview(tempView)
self.backgroundColor = offColor
UIView.animate(withDuration: dotTravelTime, animations: { [weak self] in
//RIGHT HERE is the code for the circle to hold it's circular form
if self != nil {
tempView.frame = CGRect(x: self!.ballDiameter/2, y: self!.ballDiameter/2, width: 0, height: 0)
tempView.layer.cornerRadius = self!.ballDiameter/2
}
self?.layoutIfNeeded()
}) { _ in
tempView.removeFromSuperview()
}
}
私はサークルのアニメーションを取り扱う場所です。 temp UIViewを使ってアニメーションを処理し、実際のビューの色を変更した後にビューを削除します。 tempViewは、スライドアニメーションで変更されることがわかる円のスイッチです。私のデザインに関する情報が必要な場合は、私に知らせてください。私はたくさんのことを試しました。そして、すべてのものは、円が正方形であるか、または私が望むよりもわずかに大きなコーナー半径を持つように解決されました。 (私はそれが元のサイズから、いくつかの角の半径を縮小していると思いますが、それは軽微であります。
フレームサイズを変更する代わりに自動レイアウトを試しましたか? – dfd
Autolayoutはさらに悪化するでしょう。 @dfd – Sethmr
@Mattは非常に良いです。彼はあなたに良い答えをくれたことをうれしく思います。 – dfd