画面のサイズを採用するために、進行状況ビューのサイズと回転を変更しようとしています。基本的には、電話の画面に充填ガラス効果があります。
self.masteryProgress.transform = CGAffineTransformMakeRotation((CGFloat(-90) / CGFloat(180.0) * CGFloat(M_PI)))
を使用してかなり無害に回転させました
_view.bounds
_を使用して画面を囲むビューのサイズを取得し、四角形と幅x高さを取得しようとしました。だから私はそこにはまりません。
_.frame
_ _.drawRect
_を使用してみましたが、それらを使用すると、それらが壊れるか、何もしません。
高さ属性は、interfaceBuilderの定数値2でロックされているようです。
カスタムアニメーションを作成する前に何か解決策はありますか?
他の投稿が言ったように、interfaceBuilderでプログレスバーの高さを設定しようとしましたが、実行しているデバイスに関係なく画面全体にプログレスビューを表示する必要があります。
私はCGAffineTransformScale(masteryProgress.transform, view.bounds.height / 1334, (view.bounds.width / 2))
を使用することになりました
ProgressViewを垂直に回転しているため、プログレスビューを幅1334(iPhone 6 Plusの高さ)および高さ2に設定します。画面の高さをこれらの値で割ることにより、任意の電話にサイズ変更する必要があります完全に。
変換を次のように設定することでスケーリングできます:
スイフト2
masteryProgress.transform = CGAffineTransformScale(masteryProgress.transform, 1, 20)
Swift 3、4
masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 20)
UIProgressView
を円形の長方形として作成しているときに問題に直面しました。変換のみを使用している間
_masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
_
私は最終的な要件ではなかったを達成しました。
私の最終的な期待は次のようなものでした
私は最終的に2つのステップに従ってそれを達成しました
1。 Interface Builderから高さ制約を設定します:
2。 UIProgressView
のカスタムクラスを作成し、func layoutSubviews()
をオーバーライドしてカスタムマスクレイヤーを追加します:
_ override func layoutSubviews() {
super.layoutSubviews()
let maskLayerPath = UIBezierPath(roundedRect: bounds, cornerRadius: 4.0)
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = maskLayerPath.cgPath
layer.mask = maskLayer
}
_
そして、これが最終結果です
変換は、これを達成するための唯一の方法であるようです。 IProgressViewの拡張として追加してみてくださいそのように。
extension UIProgressView {
@IBInspectable var barHeight : CGFloat {
get {
return transform.d * 2.0
}
set {
// 2.0 Refers to the default height of 2
let heightScale = newValue / 2.0
let c = center
transform = CGAffineTransformMakeScale(1.0, heightScale)
center = c
}
}
}
Interface Builderを使用してUIProgressViewを追加した場合、高さの制約を作成し、必要な値に変更します。それでおしまい。
これは動作します:
masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
Swift 3)では、CGAffineTransform(scaleX:CGFloat、y:CGFloat)に変更されます。したがって、コードは次のようになります。
masteryProgress.transform = CGAffineTransform(scaleX: 1, y: 4)
Swiftバージョン3.0.2はこれを使用します:
masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 5)
UIProgressView
をUIStackView
内に配置し、UIStackView
の制約を設定しても同様に機能する場合があります。少なくとも私のために働いた
Swift-UIProgressViewは対角線で塗りつぶされます
スケールプログレスバーの後
CGAffineTransformMakeScale(1.0, 5.0)
バーアニメーションは、左上隅から右下に向かって塗りつぶされます。