1

2 つの画像を 1 つのスタック ビューに配置しています。これら 2 つの正方形の画像をプログラムで円に変換したいので、次のコードを使用します。

class ProfileViewController: UIViewController {
    @IBOutlet weak var image1: UIImageView!
    @IBOutlet weak var image2: UIImageView!

    override viewDidLoad(){
        // Convert image one into circle
        self.image1.layer.cornerRadius = self.image1.frame.height/2
        self.image1.clipsToBounds = true

        // Convert image two into circle
        self.image2.layer.cornerRadius = self.image2.frame.height/2
        self.image2.clipsToBounds = true

        // Print the frames of these two images
        print(self.image1.frame)
        print(self.image2.frame)
    }
}

例では、フレームの x と y の値は重要ではありませんが、奇妙なことに、インスペクター タブの値にもかかわらず、幅と高さの値は両方ともゼロになります。

2 つの画像のフレームを印刷するボタンを画面に追加すると、予想される幅と高さの値が得られます。viewDidLoad()したがって、スタック ビューは、メソッドの起動後にオブジェクトのサイズを決定すると想定します。この状況で、2 つの画像を丸くするために実際のフレームの寸法を取得する最良の方法は何でしょうか? または、フレーム以外の値を使用する方が良い解決策でしょうか?

4

1 に答える 1

4

あなたの場合、画像ビューのフレームにアクセスしようとしており、UIStackView を使用しているため、フレームは実際には最初にviewDidLayoutSubviews(). したがって、必要な丸みを帯びた画像を取得するには、最初にスタック ビューのアウトレットを次のように作成する必要があります。

class ProfileViewController: UIViewController {
    @IBOutlet weak var verticalStackView: UIStackView!

    ...

次に、このviewDidLayoutSubviews()メソッドで、スタック ビューのインデックスにアクセスしてarrangedSubviews、イメージがあるビューを取得し (インデックスはスタック ビュー階層から上から下に決定できます)、これまで行ってきたように角を丸くします。 :

class ProfileViewController: UIViewController {
    @IBOutlet weak var verticalStackView: UIStackView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidLayoutSubviews() {
        let myImage = verticalStackView.arrangedSubviews[1] //in my test my image was the second view in the stack view hierarchy

        myImage.layer.cornerRadius = myImage.frame.height/2
        myImage.clipsToBounds = true
    }

これが役に立ったことを願っています!

于 2015-07-27T00:42:11.530 に答える