UIView maskelemek ve yuvarlatılmış köşeler vermek için Storyboard kullan?


100

Bunun gibi birçok soru , programlı olarak nasıl maske oluşturulacağını ve UIView'a yuvarlak köşelerin nasıl sağlanacağını açıklar.

Her şeyi Storyboard'da yapmanın bir yolu var mı? Sadece Storyboard'da yuvarlak köşeler oluşturmak gibi göründüğü için sormak, sunum ve mantık arasında daha net bir ayrım sağlar.


Yanıtlar:


266

Evet, bunu çok kullanıyorum ama bunun gibi sorular birçok kez cevaplandı.

Ama yine de Interface Builder'da. Aşağıdaki gibi Kullanıcı Tanımlı Çalışma Zamanı Öznitelikleri eklemeniz gerekir:

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

görüntü açıklamasını buraya girin

ve etkinleştir

Clips subviews

görüntü açıklamasını buraya girin

Sonuçlar:

görüntü açıklamasını buraya girin


Kullanıcı Tanımlı Çalışma Zamanı Niteliklerini nereye ekleyebilirim?
Henson Fang

İlk resimde gösterdiğim gibi görünümü seçin ve ardından sağdaki bölmede üçüncü simgeyi seçin Kullanıcı Tanımlı Çalışma Süresi Nitelikleri Anahtar yolu, tür, değer eklemek için aşağıdaki öğeye tıklayın
Woraphot Chokratanasombat

1
Kenarlık yarıçapını dinamik yapabilir misiniz, böylece her zaman genişliğin% 50'si mi yoksa statik bir tam sayı mı olmalıdır?
Crashalot

1
Bildiğim kadarıyla, yalnızca sabit değer.
Woraphot Chokratanasombat

1
Bilginize, benim gibi buraya bunun LaunchScreen.storyboard'da çalışacağını düşünerek geldiyseniz, işe yaramıyor. Şunları elde edeceksiniz: Error: Launch screens may not use user defined runtime attributes. Görünüşe göre LaunchScreen'de yuvarlak bir görüntüye ihtiyacınız varsa, seçenekleriniz tükendi.
Code Knox

22

Bunu, kullanıcı tanımlı özellikleri kullanarak bir film şeridinde yapabilirsiniz. Yuvarlamak istediğiniz görünümü seçin ve Identity Inspector'ı açın. In Süre Tanımlı Kullanıcı Özellikleri bölümünde, aşağıdaki iki girdiyi ekleyin:

  • Anahtar Yolu:, layer.cornerRadiusTür: Sayı, Değer: (istediğiniz yarıçap ne olursa olsun)
  • Anahtar Yolu:, layer.masksToBoundsTür: Boole, Değer: işaretlendi

QuartzKitGörünümünüzün ilgili sınıf dosyasına (varsa) içe aktarmanız gerekebilir , ancak yemin ederim ki bunu yapmadan çalışmasını sağladım. Sonuçlarınız değişebilir.

DÜZENLEME: Dinamik yarıçap örneği

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

}

Bunun bir oyun alanında çalıştığını doğruladım.


1
Kenarlık yarıçapını dinamik yapabilir misiniz, böylece her zaman genişliğin% 50'si mi yoksa statik bir tam sayı mı olmalıdır?
Crashalot

5
Yapabilirsin, ama sadece kodla. Yine de ilginç bir çözüm, görünümünüzün sınıfına 0 ile 100 arasında sayısal bir değer olan ve yarıçapın olması gereken genişliğin yüzdesini gösteren bir IBInspectable özelliği eklemektir. Örneğin, 50 değeri, yarıçapın genişliğin% 50'si olması gerektiği anlamına gelir. Hesaplanan (depolanmayan) bir özellik olduğu için, tüm görünümlerin mülke sahip olması için onu UIView uzantısına bile ekleyebilirsiniz.
NRitH

@NRitH, böyle bir şey görmek isterim. Kodu buraya gönderebileceğinizi düşünüyor musunuz?
Cobie Fisher

17

Görünüm seçin Corner Rediuse, Border Widthe ve Border Color'ı StoryBord'u da kullanarak değiştirdiniz

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
neden cornerRadius yerine cornerRadiusV kullanmalısınız?
luhuiya

1
Bu, storyboard'u kullanarak cornerRadius'a ayarlandı, yazı kodlamasını Project
Ananda Aiwale

Mükemmel çalıştı
Hassan Tareq

0

Film şeridinde tüm değişiklikleri yaptıktan sonra bile, Woraphot'un cevabı benim için işe yaramıyor.

Bu benim için çalıştı:

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

Uzun cevap :

UIView / UIButton vb.'nin Yuvarlak Köşeleri

customUIView.layer.cornerRadius = 10

Bordür Kalınlığı

pcustomUIView.layer.borderWidth = 1

Sınır rengi

customUIView.layer.borderColor = UIColor.blue.cgColor

Bu, soruyu cevaplamaya çalışmaz ve buradaki diğer cevabınızın sadece bir kopyasıdır .
şim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.