2016-02-28 14 views
7

voglio arrotondare le mie curve a destra, ma funziona solo per gli angoli di sinistraUIBezierPath non funziona in Discutiamone angolo e BottomRight angolo

let path = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [UIRectCorner.TopLeft, UIRectCorner.TopRight], cornerRadii: CGSizeMake(20.0, 20.0)) 
let maskLayer = CAShapeLayer() 
    maskLayer.path = path.CGPath 
    view.layer.mask = maskLayer 
    view.layer.masksToBounds = true 
+0

Posso vedere un'immagine? – tktsubota

+0

Penso che sia necessario pubblicare più codice perché ciò che hai pubblicato è il codice corretto. – paulvs

risposta

20

Il problema è che si sta ottenendo limiti della vista prima che sia stata ridimensionata per il dispositivo corrente. È più grande di quanto lo sarà in seguito quando apparirà sullo schermo, quindi il lato destro del rect arrotondato si trova sul lato destro dello schermo.

È necessario creare path e impostare maskLayer.path in seguito, dopo che la vista è stata ridimensionata, il che significa durante o dopo la fase di layout del ciclo di esecuzione. Quindi, sottoclasse la vista e fallo nel metodo layoutSubviews della vista, oppure esegui il metodo viewDidLayoutSubviews del controller della vista.

+0

Insightful, grazie! – acib708

+0

Grazie! Mi sono chiesto per un po 'di tempo perché gli angoli a sinistra siano resi correttamente ma non quelli giusti. – Seishin

1

Se si tenta di impostare i RoundingCorners per View che sono design su Storyboard O Xib, si prega di impostare l'angolo e MaskLayer.path nel metodo seguente.

override func viewDidLayoutSubviews() { 
// here you can write the code... 
    } 
7

Swift 3

Funziona per me!

override func layoutSubviews() { 
    super.layoutSubviews() 
    DispatchQueue.main.async { 
     self.containerView.roundCorners(corners: [.topRight,.topLeft], radius: 25) 
     self.containerView.layer.masksToBounds = true 
    } 
    self.layoutIfNeeded() 
} 

È possibile controllare il metodo del "roundCorners" qui: https://stackoverflow.com/a/41217863/3687902

+0

Questa è esattamente la logica per UITableViewCell. Grazie mille. Nessuno degli altri metodi che ho provato ha funzionato. – tuttu47