web-dev-qa-db-ja.com

SwiftでUIProgressViewの高さを変更する

画面のサイズを採用するために、進行状況ビューのサイズと回転を変更しようとしています。基本的には、電話の画面に充填ガラス効果があります。

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に設定します。画面の高さをこれらの値で割ることにより、任意の電話にサイズ変更する必要があります完全に。

25
Zach Morris

変換を次のように設定することでスケーリングできます:

スイフト2

masteryProgress.transform = CGAffineTransformScale(masteryProgress.transform, 1, 20)

Swift 3、4

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 20)

enter image description here

80
Bannings

UIProgressViewを円形の長方形として作成しているときに問題に直面しました。変換のみを使用している間

_masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
_

私は最終的な要件ではなかったを達成しました

enter image description here

私の最終的な期待は次のようなものでした

enter image description here

私は最終的に2つのステップに従ってそれを達成しました

1。 Interface Builderから高さ制約を設定します:

enter image description here

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
    }
_

そして、これが最終結果です

enter image description here

18
Sauvik Dolui

変換は、これを達成するための唯一の方法であるようです。 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
        }
    }   
}
18
THISguy

Interface Builderを使用してUIProgressViewを追加した場合、高さの制約を作成し、必要な値に変更します。それでおしまい。

11

これは動作します:

masteryProgress.transform = CGAffineTransformMakeScale(1, 4)
6
Andy Lebowitz

Swift 3)では、CGAffineTransform(scaleX:CGFloat、y:CGFloat)に変更されます。したがって、コードは次のようになります。

masteryProgress.transform = CGAffineTransform(scaleX: 1, y: 4)
4

Swiftバージョン3.0.2はこれを使用します:

masteryProgress.transform = masteryProgress.transform.scaledBy(x: 1, y: 5)
2
user7510675

UIProgressViewUIStackView内に配置し、UIStackViewの制約を設定しても同様に機能する場合があります。少なくとも私のために働いた

1
Anestis S.

Swift-UIProgressViewは対角線で塗りつぶされます

スケールプログレスバーの後

CGAffineTransformMakeScale(1.0, 5.0)

バーアニメーションは、左上隅から右下に向かって塗りつぶされます。

1
Nevermore