Storyboardを使用してUIViewをマスクし、角を丸くしますか?


99

このような多くの質問は、プログラムでマスクを作成し、UIViewに角を丸める方法を説明しています。

ストーリーボード内でそれをすべて行う方法はありますか?Storyboardで角を丸く作成しているように見えるので、質問するだけで、プレゼンテーションとロジックの境界が明確になります。


回答:


264

はい、よく使いますが、このような質問にはすでに何度も回答がありました。

しかし、とにかくインターフェースビルダーで。次のようなユーザー定義のランタイム属性を追加する必要があります。

layer.masksToBounds Boolean YES
layer.cornerRadius Number {View's Width/2}

ここに画像の説明を入力してください

そして有効にする

Clips subviews

ここに画像の説明を入力してください

結果:

ここに画像の説明を入力してください


ユーザー定義のランタイム属性はどこに追加できますか?
Henson Fang

最初の画像選択ビューに表示されているように、右側のペインで3番目のアイコンを選択します。ユーザー定義ランタイム属性以下の項目をクリックして、
キーパス

1
境界の半径を動的にして、常に幅の50%にするか、静的な整数にする必要がありますか?
Crashalot

1
私の知る限り、固定値のみ。
Woraphot Chokratanasombat

1
ちなみに、私のようにあなたがここに来て、これがLaunchScreen.storyboardで機能すると考えていたとしても、機能しません。次の Error: Launch screens may not use user defined runtime attributes. ようになります。LaunchScreenに丸い画像が必要な場合は、選択肢がないようです。
Code Knox

22

ユーザー定義のプロパティを使用して、ストーリーボードで実行できます。丸めたいビューを選択し、そのIDインスペクターを開きます。でランタイムユーザー定義の属性セクションに、次の2つのエントリを追加します。

  • キーパス:layer.cornerRadius、タイプ:数値、値:(任意の半径)
  • キーパス:layer.masksToBounds、タイプ:ブール値、値:チェック済み

QuartzKitビューの対応するクラスファイル(存在する場合)にインポートする必要があるかもしれませんが、それを行わなくても機能することを確認しました。結果は異なる場合があります。

編集:動的半径の例

extension UIView {

    /// The ratio (from 0.0 to 1.0, inclusive) of the view's corner radius
    /// to its width. For example, a 50% radius would be specified with
    /// `cornerRadiusRatio = 0.5`.
    @IBDesignable public var cornerRadiusRatio: CGFloat {
        get {
            return layer.cornerRadius / frame.width
        }

        set {
            // Make sure that it's between 0.0 and 1.0. If not, restrict it
            // to that range.
            let normalizedRatio = max(0.0, min(1.0, newValue))
            layer.cornerRadius = frame.width * normalizedRatio
        }
    }

}

これが遊び場で動作することを確認しました。


1
境界の半径を動的にして、常に幅の50%にするか、静的な整数にする必要がありますか?
Crashalot、2015

5
できますが、コード内のみです。ただし、興味深い回避策は、0から100までの数値で、半径の幅の割合を示すIBInspectableプロパティをビューのクラスに追加することです。たとえば、値50は、半径が幅の50%であることを意味します。これは計算された(保存されていない)プロパティなので、UIViewの拡張機能に追加して、すべてのビューがプロパティを持つことができます。
NRitH 2015

@NRitH、私はそのようなものを見たいと思っています。ここにコードを投稿できると思いますか?
コビーフィッシャー2017

17

ビューを選択 StoryBordを使用して、コーナーリデュース、ボーダー幅、ボーダーカラーを変更した

extension UIView {

    @IBInspectable var cornerRadiusV: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidthV: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }

    @IBInspectable var borderColorV: UIColor? {
        get {
            return UIColor(cgColor: layer.borderColor!)
        }
        set {
            layer.borderColor = newValue?.cgColor
        }
    }
}

3
cornerRadiusの代わりにcornerRadiusVを使用する理由
luhuiya 2018

1
ストーリーボードを使用してcornerRadiusを設定し、プロジェクトの記述コーディングを保存します
アナンダアイワレ

完全に動作しました
Hassan Tareq

0

ストーリーボードにすべての変更を加えた後でも、Worapotの答えは私にはうまくいきません。

これは私のために働きました:

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

長い答え:

UIView / UIButtonなどの角の丸み

customUIView.layer.cornerRadius = 10

ボーダー厚さ

pcustomUIView.layer.borderWidth = 1

ボーダの色

customUIView.layer.borderColor = UIColor.blue.cgColor

これは質問への回答を試みるものではなく、ここでの他の回答の複製です
シム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.