2015-12-11 15 views
50

Un sacco di domande like this spiega come creare una maschera a livello di codice e fornire angoli arrotondati a un UIView.Usa lo storyboard per mascherare UIView e dare angoli arrotondati?

C'è un modo per fare tutto all'interno di Storyboard? Basta chiedere perché sembra che creare angoli arrotondati in Storyboard mantenga una netta demarcazione tra presentazione e logica.

+0

Possibile duplicato di [Imposta un bordo per UIButton in Storyboard] (http://stackoverflow.com/questions/20477990/set-a-border-for-uibutton-in-storyboard) – bummi

risposta

159

Sì, lo uso molto, ma domande come questa hanno già ricevuto risposta molte volte.

Tuttavia in Interface Builder. È necessario aggiungere Runtime User Defined attributi come questo:

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

enter image description here

e consentire

Clips subviews 

enter image description here

Risultati:

enter image description here

+0

dove posso aggiungere attributi definiti dall'utente? –

+0

Come mostrato nella prima immagine seleziona la vista sul pannello di destra seleziona la terza icona Attributi di runtime definiti dall'utente Fai clic sull'elemento sottostante per aggiungere il percorso chiave, digita, valore –

+1

Riesci a rendere il raggio del bordo dinamico in modo che sia sempre il 50% del larghezza o deve essere un numero intero statico? – Crashalot

9

È possibile farlo in uno storyboard utilizzando le proprietà definite dall'utente. Seleziona la vista che vuoi arrotondare e apri la sua Identity Inspector. Nel runtime Definito attributi utente sezione, aggiungere le seguenti due voci:

  • Percorso chiave: layer.cornerRadius, Tipo: numero, il valore: (qualunque raggio che vuoi)
  • Percorso chiave: layer.masksToBounds, Tipo: booleano , Valore: checked

potrebbe essere necessario importare QuartzKit nel file di classe corrispondente del vostro vista (se esiste), ma giuro che ho ottenuto al lavoro senza farlo. I risultati possono variare.

EDIT: Esempio di un raggio dinamico

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

} 

ho verificato che questo funziona in un parco giochi.

+0

Riesci a rendere dinamico il raggio del bordo quindi è sempre il 50% della larghezza o deve essere un numero intero statico? – Crashalot

+2

È possibile, ma solo nel codice. Una soluzione interessante, tuttavia, consiste nell'aggiungere una proprietà IBInspectable alla classe della vista che è un valore numerico compreso tra 0 e 100 e indica la percentuale della larghezza che dovrebbe essere il raggio. Ad esempio, un valore di 50 significa che il raggio dovrebbe essere il 50% della larghezza. Poiché è una proprietà calcolata (non memorizzata), puoi persino aggiungerla a un'estensione di UIView in modo che tutte le viste possano avere la proprietà. – NRitH

+0

@NRitH, sarei interessato a vedere qualcosa del genere. Pensi di poter postare il codice qui? –